Ver código fonte

* moved all jvm-specific code from symsym to jvm/symcpu

git-svn-id: trunk@27384 -
Jonas Maebe 11 anos atrás
pai
commit
721fd887c3
2 arquivos alterados com 83 adições e 60 exclusões
  1. 72 0
      compiler/jvm/symcpu.pas
  2. 11 60
      compiler/symsym.pas

+ 72 - 0
compiler/jvm/symcpu.pas

@@ -26,6 +26,7 @@ unit symcpu;
 interface
 
 uses
+  globtype,
   symdef,symsym;
 
 type
@@ -104,6 +105,8 @@ type
   end;
 
   tcpufieldvarsym = class(tfieldvarsym)
+    procedure set_externalname(const s: string); override;
+    function mangledname: TSymStr; override;
   end;
 
   tcpulocalvarsym = class(tlocalvarsym)
@@ -113,6 +116,8 @@ type
   end;
 
   tcpustaticvarsym = class(tstaticvarsym)
+    procedure set_mangledname(const s: TSymStr); override;
+    function mangledname: TSymStr; override;
   end;
 
   tcpuabsolutevarsym = class(tabsolutevarsym)
@@ -133,6 +138,73 @@ type
 
 implementation
 
+  uses
+    verbose,cutils,
+    symtype,symconst,
+    jvmdef;
+
+{****************************************************************************
+                             tcpustaticvarsym
+****************************************************************************}
+
+  procedure tcpustaticvarsym.set_mangledname(const s: TSymStr);
+    begin
+      inherited;
+      _mangledname:=jvmmangledbasename(self,s,false);
+      jvmaddtypeownerprefix(owner,_mangledname);
+    end;
+
+
+  function tcpustaticvarsym.mangledname: TSymStr;
+    begin
+      if _mangledname='' then
+        begin
+          if _mangledbasename='' then
+            _mangledname:=jvmmangledbasename(self,false)
+          else
+            _mangledname:=jvmmangledbasename(self,_mangledbasename,false);
+          jvmaddtypeownerprefix(owner,_mangledname);
+        end;
+      result:=_mangledname;
+    end;
+
+
+{****************************************************************************
+                             tcpufieldvarsym
+****************************************************************************}
+
+  procedure tcpufieldvarsym.set_externalname(const s: string);
+    begin
+      { make sure it is recalculated }
+      cachedmangledname:='';
+      if is_java_class_or_interface(tdef(owner.defowner)) then
+        begin
+          externalname:=stringdup(s);
+          include(varoptions,vo_has_mangledname);
+        end
+      else
+        internalerror(2011031201);
+    end;
+
+
+  function tcpufieldvarsym.mangledname: TSymStr;
+    begin
+      if is_java_class_or_interface(tdef(owner.defowner)) or
+         (tdef(owner.defowner).typ=recorddef) then
+        begin
+          if cachedmangledname<>'' then
+            result:=cachedmangledname
+          else
+            begin
+              result:=jvmmangledbasename(self,false);
+              jvmaddtypeownerprefix(owner,result);
+              cachedmangledname:=result;
+            end;
+        end
+      else
+        result:=inherited;
+    end;
+
 begin
   { used tdef classes }
   cfiledef:=tcpufiledef;

+ 11 - 60
compiler/symsym.pas

@@ -203,7 +203,7 @@ interface
           { do not override this routine in platform-specific subclasses,
             override ppuwrite_platform instead }
           procedure ppuwrite(ppufile:tcompilerppufile);override;final;
-          procedure set_externalname(const s:string);
+          procedure set_externalname(const s:string);virtual;
           function mangledname:TSymStr;override;
           destructor destroy;override;
       end;
@@ -258,7 +258,7 @@ interface
       tparavarsymclass = class of tparavarsym;
 
       tstaticvarsym = class(tabstractnormalvarsym)
-      private
+      protected
 {$ifdef symansistr}
           _mangledbasename,
           _mangledname : TSymStr;
@@ -283,7 +283,7 @@ interface
           function mangledname:TSymStr;override;
           procedure set_mangledbasename(const s: TSymStr);
           function mangledbasename: TSymStr;
-          procedure set_mangledname(const s:TSymStr);
+          procedure set_mangledname(const s:TSymStr);virtual;
           procedure set_raw_mangledname(const s:TSymStr);
       end;
       tstaticvarsymclass = class of tstaticvarsym;
@@ -453,9 +453,6 @@ implementation
        systems,
        { symtable }
        defutil,symtable,
-{$ifdef jvm}
-       jvmdef,
-{$endif}
        fmodule,
        { tree }
        node,
@@ -1671,21 +1668,7 @@ implementation
 
     procedure tfieldvarsym.set_externalname(const s: string);
       begin
-        { make sure it is recalculated }
-{$ifdef symansistr}
-        cachedmangledname:='';
-{$else symansistr}
-        stringdispose(cachedmangledname);
-{$endif symansistr}
-{$ifdef jvm}
-        if is_java_class_or_interface(tdef(owner.defowner)) then
-          begin
-            externalname:=stringdup(s);
-            include(varoptions,vo_has_mangledname);
-          end
-        else
-{$endif jvm}
-          internalerror(2011031201);
+        internalerror(2014033001);
       end;
 
 
@@ -1694,21 +1677,6 @@ implementation
         srsym : tsym;
         srsymtable : tsymtable;
       begin
-{$ifdef jvm}
-        if is_java_class_or_interface(tdef(owner.defowner)) or
-           (tdef(owner.defowner).typ=recorddef) then
-          begin
-            if cachedmangledname<>'' then
-              result:=cachedmangledname
-            else
-              begin
-                result:=jvmmangledbasename(self,false);
-                jvmaddtypeownerprefix(owner,result);
-                cachedmangledname:=result;
-              end;
-          end
-        else
-{$endif jvm}
         if sp_static in symoptions then
           begin
             if searchsym(lower(owner.name^)+'_'+name,srsym,srsymtable) then
@@ -1903,11 +1871,9 @@ implementation
 
 
     function tstaticvarsym.mangledname:TSymStr;
-{$ifndef jvm}
       var
         usename,
         prefix : TSymStr;
-{$endif jvm}
       begin
 {$ifdef symansistr}
         if _mangledname='' then
@@ -1915,31 +1881,23 @@ implementation
         if not assigned(_mangledname) then
 {$endif symansistr}
           begin
-{$ifdef jvm}
-            if _mangledbasename='' then
-              _mangledname:=jvmmangledbasename(self,false)
-            else
-              _mangledname:=jvmmangledbasename(self,_mangledbasename,false);
-            jvmaddtypeownerprefix(owner,_mangledname);
-{$else jvm}
             if (vo_is_typed_const in varoptions) then
               prefix:='TC'
             else
               prefix:='U';
-  {$ifdef symansistr}
+{$ifdef symansistr}
             if _mangledbasename='' then
               usename:=name
             else
               usename:=_mangledbasename;
             _mangledname:=make_mangledname(prefix,owner,usename);
-  {$else symansistr}
+{$else symansistr}
             if not assigned(_mangledbasename) then
               usename:=name
             else
               usename:=_mangledbasename^;
             _mangledname:=stringdup(make_mangledname(prefix,owner,usename));
-  {$endif symansistr}
-{$endif jvm}
+{$endif symansistr}
           end;
 {$ifdef symansistr}
         result:=_mangledname;
@@ -1978,19 +1936,12 @@ implementation
 
     procedure tstaticvarsym.set_mangledname(const s:TSymStr);
       begin
-{$ifndef symansistr}
-        stringdispose(_mangledname);
-{$endif}
-{$if defined(jvm)}
-        _mangledname:=jvmmangledbasename(self,s,false);
-        jvmaddtypeownerprefix(owner,_mangledname);
-{$else}
-  {$ifdef symansistr}
+{$ifdef symansistr}
         _mangledname:=s;
-  {$else symansistr}
+{$else symansistr}
+        stringdispose(_mangledname);
         _mangledname:=stringdup(s);
-  {$endif symansistr}
-{$endif}
+{$endif symansistr}
         include(varoptions,vo_has_mangledname);
       end;