Browse Source

* removed getprocvar, use only getprocvardef

peter 23 years ago
parent
commit
5cdb7cc52b
3 changed files with 31 additions and 25 deletions
  1. 5 3
      compiler/pbase.pas
  2. 21 19
      compiler/pexpr.pas
  3. 5 3
      compiler/ptconst.pas

+ 5 - 3
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

+ 21 - 19
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

+ 5 - 3
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