mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-21 02:21:42 +02:00
compiler: move parse_generic_parameters to the interface of pdecl unit, move insert_generic_parameter_types to pdecl unit to access them from pdecsub (preparations for generic methods implementation)
git-svn-id: trunk@16724 -
This commit is contained in:
parent
31de2aab1b
commit
e0e01899e5
@ -26,10 +26,12 @@ unit pdecl;
|
||||
interface
|
||||
|
||||
uses
|
||||
{ common }
|
||||
cclasses,
|
||||
{ global }
|
||||
globtype,
|
||||
{ symtable }
|
||||
symsym,
|
||||
symsym,symdef,
|
||||
{ pass_1 }
|
||||
node;
|
||||
|
||||
@ -45,19 +47,23 @@ interface
|
||||
procedure property_dec(is_classpropery: boolean);
|
||||
procedure resourcestring_dec;
|
||||
|
||||
{ generics support }
|
||||
function parse_generic_parameters:TFPObjectList;
|
||||
procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
{ common }
|
||||
cutils,cclasses,
|
||||
cutils,
|
||||
{ global }
|
||||
globals,tokens,verbose,widestr,constexp,
|
||||
systems,
|
||||
{ aasm }
|
||||
aasmbase,aasmtai,aasmdata,fmodule,
|
||||
{ symtable }
|
||||
symconst,symbase,symtype,symdef,symtable,paramgr,defutil,
|
||||
symconst,symbase,symtype,symtable,paramgr,defutil,
|
||||
{ pass 1 }
|
||||
nmat,nadd,ncal,nset,ncnv,ninl,ncon,nld,nflw,nobj,
|
||||
{ codegen }
|
||||
@ -330,6 +336,50 @@ implementation
|
||||
consume(_SEMICOLON);
|
||||
end;
|
||||
|
||||
function parse_generic_parameters:TFPObjectList;
|
||||
var
|
||||
generictype : ttypesym;
|
||||
begin
|
||||
result:=TFPObjectList.Create(false);
|
||||
repeat
|
||||
if token=_ID then
|
||||
begin
|
||||
generictype:=ttypesym.create(orgpattern,cundefinedtype);
|
||||
include(generictype.symoptions,sp_generic_para);
|
||||
result.add(generictype);
|
||||
end;
|
||||
consume(_ID);
|
||||
until not try_to_consume(_COMMA) ;
|
||||
end;
|
||||
|
||||
procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
|
||||
var
|
||||
i: longint;
|
||||
generictype: ttypesym;
|
||||
st: tsymtable;
|
||||
begin
|
||||
def.genericdef:=genericdef;
|
||||
if not assigned(genericlist) then
|
||||
exit;
|
||||
|
||||
case def.typ of
|
||||
recorddef,objectdef: st:=tabstractrecorddef(def).symtable;
|
||||
arraydef: st:=tarraydef(def).symtable;
|
||||
procvardef,procdef: st:=tabstractprocdef(def).parast;
|
||||
else
|
||||
internalerror(201101020);
|
||||
end;
|
||||
|
||||
for i:=0 to genericlist.count-1 do
|
||||
begin
|
||||
generictype:=ttypesym(genericlist[i]);
|
||||
if generictype.typedef.typ=undefineddef then
|
||||
include(def.defoptions,df_generic)
|
||||
else
|
||||
include(def.defoptions,df_specialization);
|
||||
st.insert(generictype);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure types_dec(in_structure: boolean);
|
||||
|
||||
@ -343,23 +393,6 @@ implementation
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function parse_generic_parameters:TFPObjectList;
|
||||
var
|
||||
generictype : ttypesym;
|
||||
begin
|
||||
result:=TFPObjectList.Create(false);
|
||||
repeat
|
||||
if token=_ID then
|
||||
begin
|
||||
generictype:=ttypesym.create(orgpattern,cundefinedtype);
|
||||
include(generictype.symoptions,sp_generic_para);
|
||||
result.add(generictype);
|
||||
end;
|
||||
consume(_ID);
|
||||
until not try_to_consume(_COMMA) ;
|
||||
end;
|
||||
|
||||
var
|
||||
typename,orgtypename : TIDString;
|
||||
newtype : ttypesym;
|
||||
|
@ -37,7 +37,6 @@ interface
|
||||
function constructor_head:tprocdef;
|
||||
function destructor_head:tprocdef;
|
||||
procedure struct_property_dec(is_classproperty:boolean);
|
||||
procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
|
||||
|
||||
implementation
|
||||
|
||||
@ -588,37 +587,6 @@ implementation
|
||||
message(parser_e_dispinterface_needs_a_guid);
|
||||
end;
|
||||
|
||||
|
||||
procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
|
||||
var
|
||||
i: longint;
|
||||
generictype: ttypesym;
|
||||
st: tsymtable;
|
||||
begin
|
||||
def.genericdef:=genericdef;
|
||||
if not assigned(genericlist) then
|
||||
exit;
|
||||
|
||||
case def.typ of
|
||||
recorddef,objectdef: st:=tabstractrecorddef(def).symtable;
|
||||
arraydef: st:=tarraydef(def).symtable;
|
||||
procvardef: st:=tprocvardef(def).parast;
|
||||
else
|
||||
internalerror(201101020);
|
||||
end;
|
||||
|
||||
for i:=0 to genericlist.count-1 do
|
||||
begin
|
||||
generictype:=ttypesym(genericlist[i]);
|
||||
if generictype.typedef.typ=undefineddef then
|
||||
include(def.defoptions,df_generic)
|
||||
else
|
||||
include(def.defoptions,df_specialization);
|
||||
st.insert(generictype);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure parse_object_members;
|
||||
|
||||
procedure chkobjc(pd: tprocdef);
|
||||
|
Loading…
Reference in New Issue
Block a user