mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-31 02:02:40 +02:00
* moved all jvm-specific code from symsym to jvm/symcpu
git-svn-id: trunk@27384 -
This commit is contained in:
parent
4a7e6b8b8f
commit
721fd887c3
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user