Browse Source

* fixed handling of static varsyms used for typed constants
* also print staticvarsyms inside localsymtables of procdefs
(used for typed constants and variable initialisers)

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

Jonas Maebe 14 years ago
parent
commit
1c54d3a758
1 changed files with 11 additions and 3 deletions
  1. 11 3
      compiler/agjasmin.pas

+ 11 - 3
compiler/agjasmin.pas

@@ -812,8 +812,8 @@ implementation
           else
           else
             internalerror(2011011204);
             internalerror(2011011204);
         end;
         end;
-        if (vissym.owner.symtabletype in [staticsymtable,globalsymtable]) or
-           (sp_static in vissym.symoptions) then
+        if (sym.typ=staticvarsym) or
+           (sp_static in sym.symoptions) then
           result:=result+'static ';
           result:=result+'static ';
         result:=result+jvmmangledbasename(sym);
         result:=result+jvmmangledbasename(sym);
       end;
       end;
@@ -897,7 +897,7 @@ implementation
     procedure TJasminAssembler.WriteSymtableVarSyms(st: TSymtable);
     procedure TJasminAssembler.WriteSymtableVarSyms(st: TSymtable);
       var
       var
         sym : tsym;
         sym : tsym;
-        i   : longint;
+        i,j : longint;
       begin
       begin
         if not assigned(st) then
         if not assigned(st) then
           exit;
           exit;
@@ -909,11 +909,19 @@ implementation
              fieldvarsym:
              fieldvarsym:
                begin
                begin
                  WriteFieldSym(tabstractvarsym(sym));
                  WriteFieldSym(tabstractvarsym(sym));
+                 if (sym.typ=staticvarsym) and
+                    assigned(tstaticvarsym(sym).defaultconstsym) then
+                   WriteFieldSym(tabstractvarsym(tstaticvarsym(sym).defaultconstsym));
                end;
                end;
              constsym:
              constsym:
                begin
                begin
                  WriteConstSym(tconstsym(sym));
                  WriteConstSym(tconstsym(sym));
                end;
                end;
+             procsym:
+               begin
+                 for j:=0 to tprocsym(sym).procdeflist.count-1 do
+                   WriteSymtableVarSyms(tprocdef(tprocsym(sym).procdeflist[j]).localst);
+               end;
            end;
            end;
          end;
          end;
       end;
       end;