mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-03 01:09:40 +01:00
Moved "parse_generic_parameters" and "insert_generic_parameter_types" from "pdecl.pas" to "pgenutil.pas"
git-svn-id: branches/svenbarth/generics@17404 -
This commit is contained in:
parent
05e5bc031b
commit
b1959e5e89
@ -47,10 +47,6 @@ 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
|
||||
@ -70,7 +66,7 @@ implementation
|
||||
ncgutil,
|
||||
{ parser }
|
||||
scanner,
|
||||
pbase,pexpr,ptype,ptconst,pdecsub,pdecvar,pdecobj,
|
||||
pbase,pexpr,ptype,ptconst,pdecsub,pdecvar,pdecobj,pgenutil,
|
||||
{ cpu-information }
|
||||
cpuinfo
|
||||
;
|
||||
@ -336,51 +332,6 @@ 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);
|
||||
|
||||
procedure finalize_objc_class_or_protocol_external_status(od: tobjectdef);
|
||||
|
||||
@ -46,7 +46,7 @@ implementation
|
||||
symbase,symsym,symtable,
|
||||
node,nld,nmem,ncon,ncnv,ncal,
|
||||
fmodule,scanner,
|
||||
pbase,pexpr,pdecsub,pdecvar,ptype,pdecl,ppu
|
||||
pbase,pexpr,pdecsub,pdecvar,ptype,pdecl,pgenutil,ppu
|
||||
;
|
||||
|
||||
const
|
||||
|
||||
@ -27,19 +27,24 @@ unit pgenutil;
|
||||
interface
|
||||
|
||||
uses
|
||||
symtype;
|
||||
{ common }
|
||||
cclasses,
|
||||
{ symtable }
|
||||
symtype,symdef;
|
||||
|
||||
procedure generate_specialization(var tt:tdef;parse_class_parent:boolean);
|
||||
function parse_generic_parameters:TFPObjectList;
|
||||
procedure insert_generic_parameter_types(def:tstoreddef;genericdef:tstoreddef;genericlist:TFPObjectList);
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
{ common }
|
||||
cclasses,cutils,
|
||||
cutils,
|
||||
{ global }
|
||||
globals,tokens,verbose,
|
||||
{ symtable }
|
||||
symconst,symbase,symdef,symsym,symtable,
|
||||
symconst,symbase,symsym,symtable,
|
||||
{ modules }
|
||||
fmodule,
|
||||
{ pass 1 }
|
||||
@ -357,4 +362,51 @@ uses
|
||||
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;
|
||||
|
||||
|
||||
end.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user