Explorar el Código

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

git-svn-id: trunk@1967 -
florian hace 19 años
padre
commit
53d7eafa7d
Se han modificado 1 ficheros con 24 adiciones y 8 borrados
  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;