Procházet zdrojové kódy

* if a mangledbasename is set for staticvarsyms, also use if when emitting
definitions

git-svn-id: branches/jvmbackend@18814 -

Jonas Maebe před 14 roky
rodič
revize
7010116096
2 změnil soubory, kde provedl 21 přidání a 0 odebrání
  1. 3 0
      compiler/jvm/jvmdef.pas
  2. 18 0
      compiler/symsym.pas

+ 3 - 0
compiler/jvm/jvmdef.pas

@@ -837,6 +837,9 @@ implementation
         if (sym.typ=fieldvarsym) and
            assigned(tfieldvarsym(sym).externalname) then
           result:=jvmmangledbasename(sym,tfieldvarsym(sym).externalname^,withsignature)
+        else if (sym.typ=staticvarsym) and
+           (tstaticvarsym(sym).mangledbasename<>'') then
+          result:=jvmmangledbasename(sym,tstaticvarsym(sym).mangledbasename,withsignature)
         else
           result:=jvmmangledbasename(sym,sym.RealName,withsignature);
       end;

+ 18 - 0
compiler/symsym.pas

@@ -226,6 +226,7 @@ interface
           procedure ppuwrite(ppufile:tcompilerppufile);override;
           function mangledname:TSymStr;override;
           procedure set_mangledbasename(const s: TSymStr);
+          function mangledbasename: TSymStr;
           procedure set_mangledname(const s:TSymStr);
           procedure set_raw_mangledname(const s:TSymStr);
       end;
@@ -1594,8 +1595,12 @@ implementation
     procedure tstaticvarsym.set_mangledbasename(const s: TSymStr);
       begin
   {$ifdef symansistr}
+        if _mangledname<>'' then
+          internalerror(2011082202);
         _mangledbasename:=s;
   {$else symansistr}
+        if assigned(_mangledname) then
+          internalerror(2011082202);
         stringdispose(_mangledbasename);
         _mangledbasename:=stringdup(s);
   {$endif symansistr}
@@ -1603,6 +1608,19 @@ implementation
       end;
 
 
+    function tstaticvarsym.mangledbasename: TSymStr;
+      begin
+{$ifdef symansistr}
+        result:=_mangledbasename;
+{$else symansistr}
+        if assigned(_mangledbasename) then
+          result:=_mangledbasename^
+        else
+          result:='';
+{$endif symansistr}
+      end;
+
+
     procedure tstaticvarsym.set_mangledname(const s:TSymStr);
       begin
 {$ifndef symansistr}