mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-25 00:29:25 +02:00
* moved the initialisation of the nodetree and tai class reference constants
from the unit initialisation sections to the variable declaration sections to prevent the base units from overriding derived classes (based on patch by Hans-Peter Dietrich, mantis #17516) git-svn-id: trunk@16118 -
This commit is contained in:
parent
15846bf3d1
commit
769eb3f604
@ -642,9 +642,9 @@ interface
|
|||||||
{ array with all class types for tais }
|
{ array with all class types for tais }
|
||||||
aiclass : taiclassarray;
|
aiclass : taiclassarray;
|
||||||
|
|
||||||
{ target specific tais }
|
{ target specific tais, possibly overwritten in target specific aasmcpu }
|
||||||
cai_align : tai_align_class;
|
cai_align : tai_align_class = tai_align_abstract;
|
||||||
cai_cpu : tai_cpu_class;
|
cai_cpu : tai_cpu_class = tai_cpu_abstract;
|
||||||
|
|
||||||
{ hook to notify uses of registers }
|
{ hook to notify uses of registers }
|
||||||
add_reg_instruction_hook : tadd_reg_instruction_proc;
|
add_reg_instruction_hook : tadd_reg_instruction_proc;
|
||||||
@ -2405,11 +2405,4 @@ implementation
|
|||||||
ppufile.putbyte(byte(use_op));
|
ppufile.putbyte(byte(use_op));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
cai_cpu:=tai_cpu_abstract;
|
|
||||||
{ aasmcpu is earlier in the unit order and can
|
|
||||||
already set the cai_align }
|
|
||||||
if not assigned(cai_align) then
|
|
||||||
cai_align:=tai_align_abstract;
|
|
||||||
end.
|
end.
|
||||||
|
@ -85,7 +85,7 @@ interface
|
|||||||
{ the virtual constructor allows to assign }
|
{ the virtual constructor allows to assign }
|
||||||
{ another class type to caddnode => processor }
|
{ another class type to caddnode => processor }
|
||||||
{ specific node types can be created }
|
{ specific node types can be created }
|
||||||
caddnode : taddnodeclass;
|
caddnode : taddnodeclass = taddnode;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -2806,6 +2806,4 @@ implementation
|
|||||||
end;
|
end;
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
begin
|
|
||||||
caddnode:=taddnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -194,14 +194,14 @@ type
|
|||||||
ttempdeletenodeclass = class of ttempdeletenode;
|
ttempdeletenodeclass = class of ttempdeletenode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cnothingnode : tnothingnodeclass;
|
cnothingnode : tnothingnodeclass = tnothingnode;
|
||||||
cerrornode : terrornodeclass;
|
cerrornode : terrornodeclass = terrornode;
|
||||||
casmnode : tasmnodeclass;
|
casmnode : tasmnodeclass = tasmnode;
|
||||||
cstatementnode : tstatementnodeclass;
|
cstatementnode : tstatementnodeclass = tstatementnode;
|
||||||
cblocknode : tblocknodeclass;
|
cblocknode : tblocknodeclass = tblocknode;
|
||||||
ctempcreatenode : ttempcreatenodeclass;
|
ctempcreatenode : ttempcreatenodeclass = ttempcreatenode;
|
||||||
ctemprefnode : ttemprefnodeclass;
|
ctemprefnode : ttemprefnodeclass = ttemprefnode;
|
||||||
ctempdeletenode : ttempdeletenodeclass;
|
ctempdeletenode : ttempdeletenodeclass = ttempdeletenode;
|
||||||
|
|
||||||
{ Create a blocknode and statement node for multiple statements
|
{ Create a blocknode and statement node for multiple statements
|
||||||
generated internally by the parser }
|
generated internally by the parser }
|
||||||
@ -1127,13 +1127,4 @@ implementation
|
|||||||
tempinfo^.typedef.GetTypeName,'", tempinfo = $',hexstr(ptrint(tempinfo),sizeof(ptrint)*2));
|
tempinfo^.typedef.GetTypeName,'", tempinfo = $',hexstr(ptrint(tempinfo),sizeof(ptrint)*2));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
|
||||||
cnothingnode:=tnothingnode;
|
|
||||||
cerrornode:=terrornode;
|
|
||||||
casmnode:=tasmnode;
|
|
||||||
cstatementnode:=tstatementnode;
|
|
||||||
cblocknode:=tblocknode;
|
|
||||||
ctempcreatenode:=ttempcreatenode;
|
|
||||||
ctemprefnode:=ttemprefnode;
|
|
||||||
ctempdeletenode:=ttempdeletenode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -224,8 +224,8 @@ interface
|
|||||||
function translate_disp_call(selfnode,parametersnode,putvalue : tnode;methodname : ansistring;dispid : longint;resultdef : tdef) : tnode;
|
function translate_disp_call(selfnode,parametersnode,putvalue : tnode;methodname : ansistring;dispid : longint;resultdef : tdef) : tnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
ccallnode : tcallnodeclass;
|
ccallnode : tcallnodeclass = tcallnode;
|
||||||
ccallparanode : tcallparanodeclass;
|
ccallparanode : tcallparanodeclass = tcallparanode;
|
||||||
|
|
||||||
{ Current callnode, this is needed for having a link
|
{ Current callnode, this is needed for having a link
|
||||||
between the callparanodes and the callnode they belong to }
|
between the callparanodes and the callnode they belong to }
|
||||||
@ -3803,8 +3803,4 @@ implementation
|
|||||||
{$endif DEBUGINLINE}
|
{$endif DEBUGINLINE}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
ccallnode:=tcallnode;
|
|
||||||
ccallparanode:=tcallparanode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -219,9 +219,9 @@ interface
|
|||||||
tisnodeclass = class of tisnode;
|
tisnodeclass = class of tisnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
ctypeconvnode : ttypeconvnodeclass;
|
ctypeconvnode : ttypeconvnodeclass = ttypeconvnode;
|
||||||
casnode : tasnodeclass;
|
casnode : tasnodeclass = tasnode;
|
||||||
cisnode : tisnodeclass;
|
cisnode : tisnodeclass=tisnode;
|
||||||
|
|
||||||
procedure inserttypeconv(var p:tnode;def:tdef);
|
procedure inserttypeconv(var p:tnode;def:tdef);
|
||||||
procedure inserttypeconv_explicit(var p:tnode;def:tdef);
|
procedure inserttypeconv_explicit(var p:tnode;def:tdef);
|
||||||
@ -3601,9 +3601,4 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
ctypeconvnode:=ttypeconvnode;
|
|
||||||
casnode:=tasnode;
|
|
||||||
cisnode:=tisnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -178,14 +178,14 @@ interface
|
|||||||
tguidconstnodeclass = class of tguidconstnode;
|
tguidconstnodeclass = class of tguidconstnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cdataconstnode : tdataconstnodeclass;
|
crealconstnode : trealconstnodeclass = trealconstnode;
|
||||||
crealconstnode : trealconstnodeclass;
|
cordconstnode : tordconstnodeclass = tordconstnode;
|
||||||
cordconstnode : tordconstnodeclass;
|
cpointerconstnode : tpointerconstnodeclass = tpointerconstnode;
|
||||||
cpointerconstnode : tpointerconstnodeclass;
|
cstringconstnode : tstringconstnodeclass = tstringconstnode;
|
||||||
cstringconstnode : tstringconstnodeclass;
|
csetconstnode : tsetconstnodeclass = tsetconstnode;
|
||||||
csetconstnode : tsetconstnodeclass;
|
cguidconstnode : tguidconstnodeclass = tguidconstnode;
|
||||||
cguidconstnode : tguidconstnodeclass;
|
cnilnode : tnilnodeclass=tnilnode;
|
||||||
cnilnode : tnilnodeclass;
|
cdataconstnode : tdataconstnodeclass = tdataconstnode;
|
||||||
|
|
||||||
function genintconstnode(v : TConstExprInt) : tordconstnode;
|
function genintconstnode(v : TConstExprInt) : tordconstnode;
|
||||||
function genenumnode(v : tenumsym) : tordconstnode;
|
function genenumnode(v : tenumsym) : tordconstnode;
|
||||||
@ -1220,13 +1220,4 @@ implementation
|
|||||||
(guid2string(value) = guid2string(tguidconstnode(p).value));
|
(guid2string(value) = guid2string(tguidconstnode(p).value));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
crealconstnode:=trealconstnode;
|
|
||||||
cordconstnode:=tordconstnode;
|
|
||||||
cpointerconstnode:=tpointerconstnode;
|
|
||||||
cstringconstnode:=tstringconstnode;
|
|
||||||
csetconstnode:=tsetconstnode;
|
|
||||||
cnilnode:=tnilnode;
|
|
||||||
cguidconstnode:=tguidconstnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -205,18 +205,18 @@ interface
|
|||||||
tonnodeclass = class of tonnode;
|
tonnodeclass = class of tonnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cwhilerepeatnode : twhilerepeatnodeclass;
|
cwhilerepeatnode : twhilerepeatnodeclass=twhilerepeatnode;
|
||||||
cifnode : tifnodeclass;
|
cifnode : tifnodeclass = tifnode;
|
||||||
cfornode : tfornodeclass;
|
cfornode : tfornodeclass = tfornode;
|
||||||
cexitnode : texitnodeclass;
|
cexitnode : texitnodeclass = texitnode;
|
||||||
cbreaknode : tbreaknodeclass;
|
cgotonode : tgotonodeclass = tgotonode;
|
||||||
ccontinuenode : tcontinuenodeclass;
|
clabelnode : tlabelnodeclass = tlabelnode;
|
||||||
cgotonode : tgotonodeclass;
|
craisenode : traisenodeclass = traisenode;
|
||||||
clabelnode : tlabelnodeclass;
|
ctryexceptnode : ttryexceptnodeclass = ttryexceptnode;
|
||||||
craisenode : traisenodeclass;
|
ctryfinallynode : ttryfinallynodeclass = ttryfinallynode;
|
||||||
ctryexceptnode : ttryexceptnodeclass;
|
connode : tonnodeclass = tonnode;
|
||||||
ctryfinallynode : ttryfinallynodeclass;
|
cbreaknode : tbreaknodeclass = tbreaknode;
|
||||||
connode : tonnodeclass;
|
ccontinuenode : tcontinuenodeclass = tcontinuenode;
|
||||||
|
|
||||||
// for-in loop helpers
|
// for-in loop helpers
|
||||||
function create_type_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
|
function create_type_for_in_loop(hloopvar, hloopbody, expr: tnode): tnode;
|
||||||
@ -2105,16 +2105,4 @@ implementation
|
|||||||
docompare := false;
|
docompare := false;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
cwhilerepeatnode:=twhilerepeatnode;
|
|
||||||
cifnode:=tifnode;
|
|
||||||
cfornode:=tfornode;
|
|
||||||
cexitnode:=texitnode;
|
|
||||||
cgotonode:=tgotonode;
|
|
||||||
clabelnode:=tlabelnode;
|
|
||||||
craisenode:=traisenode;
|
|
||||||
ctryexceptnode:=ttryexceptnode;
|
|
||||||
ctryfinallynode:=ttryfinallynode;
|
|
||||||
connode:=tonnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -75,7 +75,7 @@ interface
|
|||||||
tinlinenodeclass = class of tinlinenode;
|
tinlinenodeclass = class of tinlinenode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cinlinenode : tinlinenodeclass;
|
cinlinenode : tinlinenodeclass = tinlinenode;
|
||||||
|
|
||||||
function geninlinenode(number : byte;is_const:boolean;l : tnode) : tinlinenode;
|
function geninlinenode(number : byte;is_const:boolean;l : tnode) : tinlinenode;
|
||||||
|
|
||||||
@ -3224,6 +3224,4 @@ implementation
|
|||||||
result := loop;
|
result := loop;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
|
||||||
cinlinenode:=tinlinenode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -134,12 +134,12 @@ interface
|
|||||||
trttinodeclass = class of trttinode;
|
trttinodeclass = class of trttinode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cloadnode : tloadnodeclass;
|
cloadnode : tloadnodeclass = tloadnode;
|
||||||
cassignmentnode : tassignmentnodeclass;
|
cassignmentnode : tassignmentnodeclass = tassignmentnode;
|
||||||
carrayconstructorrangenode : tarrayconstructorrangenodeclass;
|
carrayconstructorrangenode : tarrayconstructorrangenodeclass = tarrayconstructorrangenode;
|
||||||
carrayconstructornode : tarrayconstructornodeclass;
|
carrayconstructornode : tarrayconstructornodeclass = tarrayconstructornode;
|
||||||
ctypenode : ttypenodeclass;
|
ctypenode : ttypenodeclass = ttypenode;
|
||||||
crttinode : trttinodeclass;
|
crttinode : trttinodeclass = trttinode;
|
||||||
|
|
||||||
{ Current assignment node }
|
{ Current assignment node }
|
||||||
aktassignmentnode : tassignmentnode;
|
aktassignmentnode : tassignmentnode;
|
||||||
@ -1187,12 +1187,4 @@ implementation
|
|||||||
(rttitype = trttinode(p).rttitype);
|
(rttitype = trttinode(p).rttitype);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
begin
|
|
||||||
cloadnode:=tloadnode;
|
|
||||||
cassignmentnode:=tassignmentnode;
|
|
||||||
carrayconstructorrangenode:=tarrayconstructorrangenode;
|
|
||||||
carrayconstructornode:=tarrayconstructornode;
|
|
||||||
ctypenode:=ttypenode;
|
|
||||||
crttinode:=trttinode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -79,10 +79,10 @@ interface
|
|||||||
tnotnodeclass = class of tnotnode;
|
tnotnodeclass = class of tnotnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cmoddivnode : tmoddivnodeclass;
|
cmoddivnode : tmoddivnodeclass = tmoddivnode;
|
||||||
cshlshrnode : tshlshrnodeclass;
|
cshlshrnode : tshlshrnodeclass = tshlshrnode;
|
||||||
cunaryminusnode : tunaryminusnodeclass;
|
cunaryminusnode : tunaryminusnodeclass = tunaryminusnode;
|
||||||
cnotnode : tnotnodeclass;
|
cnotnode : tnotnodeclass = tnotnode;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
@ -938,9 +938,4 @@ implementation
|
|||||||
end;
|
end;
|
||||||
{$endif}
|
{$endif}
|
||||||
|
|
||||||
begin
|
|
||||||
cmoddivnode:=tmoddivnode;
|
|
||||||
cshlshrnode:=tshlshrnode;
|
|
||||||
cunaryminusnode:=tunaryminusnode;
|
|
||||||
cnotnode:=tnotnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -117,13 +117,13 @@ interface
|
|||||||
twithnodeclass = class of twithnode;
|
twithnodeclass = class of twithnode;
|
||||||
|
|
||||||
var
|
var
|
||||||
cloadvmtaddrnode : tloadvmtaddrnodeclass;
|
cloadvmtaddrnode : tloadvmtaddrnodeclass= tloadvmtaddrnode;
|
||||||
cloadparentfpnode : tloadparentfpnodeclass;
|
caddrnode : taddrnodeclass= taddrnode;
|
||||||
caddrnode : taddrnodeclass;
|
cderefnode : tderefnodeclass= tderefnode;
|
||||||
cderefnode : tderefnodeclass;
|
csubscriptnode : tsubscriptnodeclass= tsubscriptnode;
|
||||||
csubscriptnode : tsubscriptnodeclass;
|
cvecnode : tvecnodeclass= tvecnode;
|
||||||
cvecnode : tvecnodeclass;
|
cwithnode : twithnodeclass= twithnode;
|
||||||
cwithnode : twithnodeclass;
|
cloadparentfpnode : tloadparentfpnodeclass = tloadparentfpnode;
|
||||||
|
|
||||||
function is_big_untyped_addrnode(p: tnode): boolean;
|
function is_big_untyped_addrnode(p: tnode): boolean;
|
||||||
|
|
||||||
@ -1016,11 +1016,4 @@ implementation
|
|||||||
not (nf_typedaddr in p.flags) and (taddrnode(p).left.resultdef.size > 1);
|
not (nf_typedaddr in p.flags) and (taddrnode(p).left.resultdef.size > 1);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
|
||||||
cloadvmtaddrnode := tloadvmtaddrnode;
|
|
||||||
caddrnode := taddrnode;
|
|
||||||
cderefnode := tderefnode;
|
|
||||||
csubscriptnode := tsubscriptnode;
|
|
||||||
cvecnode := tvecnode;
|
|
||||||
cwithnode := twithnode;
|
|
||||||
end.
|
end.
|
||||||
|
@ -110,10 +110,10 @@ interface
|
|||||||
tcasenodeclass = class of tcasenode;
|
tcasenodeclass = class of tcasenode;
|
||||||
|
|
||||||
var
|
var
|
||||||
csetelementnode : tsetelementnodeclass;
|
csetelementnode : tsetelementnodeclass = tsetelementnode;
|
||||||
cinnode : tinnodeclass;
|
cinnode : tinnodeclass = tinnode;
|
||||||
crangenode : trangenodeclass;
|
crangenode : trangenodeclass = trangenode;
|
||||||
ccasenode : tcasenodeclass;
|
ccasenode : tcasenodeclass = tcasenode;
|
||||||
|
|
||||||
{ counts the labels }
|
{ counts the labels }
|
||||||
function case_count_labels(root : pcaselabel) : longint;
|
function case_count_labels(root : pcaselabel) : longint;
|
||||||
@ -1017,9 +1017,4 @@ implementation
|
|||||||
insertlabel(labels);
|
insertlabel(labels);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
|
||||||
csetelementnode:=tsetelementnode;
|
|
||||||
cinnode:=tinnode;
|
|
||||||
crangenode:=trangenode;
|
|
||||||
ccasenode:=tcasenode;
|
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user