diff --git a/compiler/pbase.pas b/compiler/pbase.pas index 4023104595..e1b090d0d2 100644 --- a/compiler/pbase.pas +++ b/compiler/pbase.pas @@ -39,8 +39,7 @@ interface { true, if we are after an assignement } afterassignment : boolean = false; - { sspecial for handling procedure vars } - getprocvar : boolean = false; + { special for handling procedure vars } getprocvardef : tprocvardef = nil; type @@ -369,7 +368,10 @@ end. { $Log$ - Revision 1.13 2001-06-03 21:57:35 peter + Revision 1.14 2002-01-06 21:47:32 peter + * removed getprocvar, use only getprocvardef + + Revision 1.13 2001/06/03 21:57:35 peter + hint directive parsing support Revision 1.12 2001/05/06 14:49:17 peter diff --git a/compiler/pexpr.pas b/compiler/pexpr.pas index d815265ea1..4c2cc654ef 100644 --- a/compiler/pexpr.pas +++ b/compiler/pexpr.pas @@ -206,7 +206,7 @@ implementation set_varstate(p,false); { reset varstateset to maybe set used state later web bug769 PM } unset_varstate(p); - if not(getprocvar) and (p.resulttype.def.deftype=procvardef) then + if (getprocvardef=nil) and (p.resulttype.def.deftype=procvardef) then begin p1:=ccallnode.create(nil,nil,nil,nil); tcallnode(p1).set_procvar(p); @@ -887,7 +887,7 @@ implementation { generate a methodcallnode or proccallnode } { we shouldn't convert things like @tcollection.load } - if getprocvar then + if assigned(getprocvardef) then aprocdef:=get_proc_2_procvar_def(tprocsym(sym),getprocvardef) else aprocdef:=nil; @@ -1005,13 +1005,14 @@ implementation paras:=nil; consume(_ASSIGNMENT); { read the expression } - getprocvar:=(tpropertysym(sym).proptype.def.deftype=procvardef); + if tpropertysym(sym).proptype.def.deftype=procvardef then + getprocvardef:=tprocvardef(tpropertysym(sym).proptype.def); p2:=comp_expr(true); - if getprocvar then - handle_procvar(tprocvardef(tpropertysym(sym).proptype.def),p2,getaddr); + if assigned(getprocvardef) then + handle_procvar(getprocvardef,p2,getaddr); tcallnode(p1).left:=ccallparanode.create(p2,tcallnode(p1).left); include(tcallnode(p1).flags,nf_isproperty); - getprocvar:=false; + getprocvardef:=nil; end; varsym : begin @@ -1110,7 +1111,7 @@ implementation begin do_proc_call(sym,sym.owner, getaddr or - (getprocvar and + (assigned(getprocvardef) and ((block_type=bt_const) or ((m_tp_procvar in aktmodeswitches) and proc_to_procvar_equal(tprocsym(sym).defs^.def,getprocvardef,false) @@ -1118,7 +1119,7 @@ implementation ) ),again,p1); if (block_type=bt_const) and - getprocvar then + assigned(getprocvardef) then handle_procvar(getprocvardef,p1,getaddr); { we need to know which procedure is called } do_resulttypepass(p1); @@ -1450,7 +1451,7 @@ implementation (po_classmethod in aktprocdef.procoptions); do_proc_call(srsym,srsymtable, getaddr or - (getprocvar and + (assigned(getprocvardef) and ((block_type=bt_const) or ((m_tp_procvar in aktmodeswitches) and proc_to_procvar_equal(tprocsym(srsym).defs^.def,getprocvardef,false) @@ -1458,7 +1459,7 @@ implementation ) ),again,p1); if (block_type=bt_const) and - getprocvar then + assigned(getprocvardef) then handle_procvar(getprocvardef,p1,getaddr); { we need to know which procedure is called } if possible_error then @@ -1830,7 +1831,8 @@ implementation begin if (p1.resulttype.def.deftype=procvardef) then begin - if getprocvar and is_equal(p1.resulttype.def,getprocvardef) then + if assigned(getprocvardef) and + is_equal(p1.resulttype.def,getprocvardef) then again:=false else if (token=_LKLAMMER) or @@ -2152,7 +2154,7 @@ implementation p1:=factor(true); got_addrn:=false; p1:=caddrnode.create(p1); - if getprocvar then + if assigned(getprocvardef) then taddrnode(p1).getprocvardef:=getprocvardef; end; @@ -2394,14 +2396,11 @@ implementation begin consume(_ASSIGNMENT); if (p1.resulttype.def.deftype=procvardef) then - begin - getprocvar:=true; - getprocvardef:=tprocvardef(p1.resulttype.def); - end; + getprocvardef:=tprocvardef(p1.resulttype.def); p2:=sub_expr(opcompare,true); - if getprocvar then + if assigned(getprocvardef) then handle_procvar(getprocvardef,p2,true); - getprocvar:=false; + getprocvardef:=nil; p1:=cassignmentnode.create(p1,p2); end; _PLUSASN : @@ -2484,7 +2483,10 @@ implementation end. { $Log$ - Revision 1.53 2001-12-31 16:59:42 peter + Revision 1.54 2002-01-06 21:47:32 peter + * removed getprocvar, use only getprocvardef + + Revision 1.53 2001/12/31 16:59:42 peter * protected/private symbols parsing fixed Revision 1.52 2001/12/06 17:57:36 florian diff --git a/compiler/ptconst.pas b/compiler/ptconst.pas index c9f5948887..b6e0488af4 100644 --- a/compiler/ptconst.pas +++ b/compiler/ptconst.pas @@ -681,10 +681,9 @@ implementation if (po_methodpointer in tprocvardef(t.def).procoptions) then Message(parser_e_no_procvarobj_const); { parse the rest too, so we can continue with error checking } - getprocvar:=true; getprocvardef:=tprocvardef(t.def); p:=comp_expr(true); - getprocvar:=false; + getprocvardef:=nil; if codegenerror then begin p.free; @@ -971,7 +970,10 @@ implementation end. { $Log$ - Revision 1.39 2001-12-06 17:57:38 florian + Revision 1.40 2002-01-06 21:47:32 peter + * removed getprocvar, use only getprocvardef + + Revision 1.39 2001/12/06 17:57:38 florian + parasym to tparaitem added Revision 1.38 2001/11/02 22:58:06 peter