diff --git a/compiler/jvm/jvmdef.pas b/compiler/jvm/jvmdef.pas index 4a45656361..3a8d4b7493 100644 --- a/compiler/jvm/jvmdef.pas +++ b/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; diff --git a/compiler/symsym.pas b/compiler/symsym.pas index 73002efec2..b0864dfb49 100644 --- a/compiler/symsym.pas +++ b/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}