|
@@ -129,9 +129,10 @@ interface
|
|
tforwarddef = class(tstoreddef)
|
|
tforwarddef = class(tstoreddef)
|
|
tosymname : pshortstring;
|
|
tosymname : pshortstring;
|
|
forwardpos : tfileposinfo;
|
|
forwardpos : tfileposinfo;
|
|
- constructor create(const s:string;const pos : tfileposinfo);
|
|
|
|
|
|
+ constructor create(const s:string;const pos:tfileposinfo);
|
|
destructor destroy;override;
|
|
destructor destroy;override;
|
|
- function GetTypeName:string;override;
|
|
|
|
|
|
+ function getcopy:tstoreddef;override;
|
|
|
|
+ function GetTypeName:string;override;
|
|
end;
|
|
end;
|
|
|
|
|
|
tundefineddef = class(tstoreddef)
|
|
tundefineddef = class(tstoreddef)
|
|
@@ -162,7 +163,7 @@ interface
|
|
is_far : boolean;
|
|
is_far : boolean;
|
|
constructor create(def:tdef);
|
|
constructor create(def:tdef);
|
|
constructor createfar(def:tdef);
|
|
constructor createfar(def:tdef);
|
|
- function getcopy : tstoreddef;override;
|
|
|
|
|
|
+ function getcopy:tstoreddef;override;
|
|
constructor ppuload(ppufile:tcompilerppufile);
|
|
constructor ppuload(ppufile:tcompilerppufile);
|
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
|
function GetTypeName:string;override;
|
|
function GetTypeName:string;override;
|
|
@@ -333,9 +334,10 @@ interface
|
|
constructor create(def:tdef);
|
|
constructor create(def:tdef);
|
|
constructor ppuload(ppufile:tcompilerppufile);
|
|
constructor ppuload(ppufile:tcompilerppufile);
|
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
|
procedure ppuwrite(ppufile:tcompilerppufile);override;
|
|
- function GetTypeName:string;override;
|
|
|
|
- function is_publishable : boolean;override;
|
|
|
|
- function rtti_mangledname(rt:trttitype):string;override;
|
|
|
|
|
|
+ function getcopy:tstoreddef;override;
|
|
|
|
+ function GetTypeName:string;override;
|
|
|
|
+ function is_publishable : boolean;override;
|
|
|
|
+ function rtti_mangledname(rt:trttitype):string;override;
|
|
procedure register_created_object_type;override;
|
|
procedure register_created_object_type;override;
|
|
end;
|
|
end;
|
|
|
|
|
|
@@ -2101,7 +2103,13 @@ implementation
|
|
|
|
|
|
function tpointerdef.getcopy : tstoreddef;
|
|
function tpointerdef.getcopy : tstoreddef;
|
|
begin
|
|
begin
|
|
- result:=tpointerdef.create(pointeddef);
|
|
|
|
|
|
+ { don't use direct pointeddef if it is a forwarddef because in other case
|
|
|
|
+ one of them will be destroyed on forward type resolve and the second will
|
|
|
|
+ point to garbage }
|
|
|
|
+ if pointeddef.typ=forwarddef then
|
|
|
|
+ result:=tpointerdef.create(tforwarddef(pointeddef).getcopy)
|
|
|
|
+ else
|
|
|
|
+ result:=tpointerdef.create(pointeddef);
|
|
tpointerdef(result).is_far:=is_far;
|
|
tpointerdef(result).is_far:=is_far;
|
|
tpointerdef(result).savesize:=savesize;
|
|
tpointerdef(result).savesize:=savesize;
|
|
end;
|
|
end;
|
|
@@ -2147,6 +2155,16 @@ implementation
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
+ function tclassrefdef.getcopy:tstoreddef;
|
|
|
|
+ begin
|
|
|
|
+ if pointeddef.typ=forwarddef then
|
|
|
|
+ result:=tclassrefdef.create(tforwarddef(pointeddef).getcopy)
|
|
|
|
+ else
|
|
|
|
+ result:=tclassrefdef.create(pointeddef);
|
|
|
|
+ tclassrefdef(result).savesize:=savesize;
|
|
|
|
+ end;
|
|
|
|
+
|
|
|
|
+
|
|
function tclassrefdef.GetTypeName : string;
|
|
function tclassrefdef.GetTypeName : string;
|
|
begin
|
|
begin
|
|
GetTypeName:='Class Of '+pointeddef.typename;
|
|
GetTypeName:='Class Of '+pointeddef.typename;
|
|
@@ -5236,7 +5254,7 @@ implementation
|
|
TFORWARDDEF
|
|
TFORWARDDEF
|
|
****************************************************************************}
|
|
****************************************************************************}
|
|
|
|
|
|
- constructor tforwarddef.create(const s:string;const pos : tfileposinfo);
|
|
|
|
|
|
+ constructor tforwarddef.create(const s:string;const pos:tfileposinfo);
|
|
begin
|
|
begin
|
|
inherited create(forwarddef);
|
|
inherited create(forwarddef);
|
|
tosymname:=stringdup(s);
|
|
tosymname:=stringdup(s);
|
|
@@ -5256,6 +5274,10 @@ implementation
|
|
inherited destroy;
|
|
inherited destroy;
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
+ function tforwarddef.getcopy:tstoreddef;
|
|
|
|
+ begin
|
|
|
|
+ result:=tforwarddef.create(tosymname^, forwardpos);
|
|
|
|
+ end;
|
|
|
|
|
|
{****************************************************************************
|
|
{****************************************************************************
|
|
TUNDEFINEDDEF
|
|
TUNDEFINEDDEF
|