Browse Source

* generate always direct fpc_decr_* calls for strings instead of fpc_finalize

git-svn-id: trunk@1967 -
florian 19 years ago
parent
commit
53d7eafa7d
1 changed files with 24 additions and 8 deletions
  1. 24 8
      compiler/nutils.pas

+ 24 - 8
compiler/nutils.pas

@@ -469,14 +469,30 @@ implementation
       begin
         if not assigned(p.resulttype.def) then
           resulttypepass(p);
-        result:=ccallnode.createintern('fpc_finalize',
-              ccallparanode.create(
-                  caddrnode.create_internal(
-                      crttinode.create(
-                          tstoreddef(p.resulttype.def),initrtti)),
-              ccallparanode.create(
-                  caddrnode.create_internal(p),
-              nil)));
+        if is_ansistring(p.resulttype.def) then
+          begin
+            result:=ccallnode.createintern('fpc_ansistr_decr_ref',
+                  ccallparanode.create(
+                    ctypeconvnode.create_internal(p,voidpointertype),
+                  nil));
+          end
+        else
+        if is_widestring(p.resulttype.def) then
+          begin
+            result:=ccallnode.createintern('fpc_widestr_decr_ref',
+                  ccallparanode.create(
+                    ctypeconvnode.create_internal(p,voidpointertype),
+                  nil));
+          end
+        else
+          result:=ccallnode.createintern('fpc_finalize',
+                ccallparanode.create(
+                    caddrnode.create_internal(
+                        crttinode.create(
+                            tstoreddef(p.resulttype.def),initrtti)),
+                ccallparanode.create(
+                    caddrnode.create_internal(p),
+                nil)));
       end;