mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 15:59:28 +01:00 
			
		
		
		
	* set_varstate cleanup
This commit is contained in:
		
							parent
							
								
									f187323816
								
							
						
					
					
						commit
						95f132db3d
					
				@ -29,7 +29,7 @@ interface
 | 
			
		||||
    uses
 | 
			
		||||
      tokens,
 | 
			
		||||
      node,
 | 
			
		||||
      symtype,symdef;
 | 
			
		||||
      symconst,symtype,symdef;
 | 
			
		||||
 | 
			
		||||
    type
 | 
			
		||||
      Ttok2nodeRec=record
 | 
			
		||||
@ -94,14 +94,8 @@ interface
 | 
			
		||||
    function  is_procsym_load(p:tnode):boolean;
 | 
			
		||||
    procedure test_local_to_procvar(from_def:tprocvardef;to_def:tdef);
 | 
			
		||||
 | 
			
		||||
    {
 | 
			
		||||
    type
 | 
			
		||||
    tvarstaterequire = (vsr_can_be_undefined,vsr_must_be_valid,
 | 
			
		||||
      vsr_is_used_after,vsr_must_be_valid_and_is_used_after); }
 | 
			
		||||
 | 
			
		||||
    { sets varsym varstate field correctly }
 | 
			
		||||
    procedure unset_varstate(p : tnode);
 | 
			
		||||
    procedure set_varstate(p : tnode;must_be_valid : boolean);
 | 
			
		||||
    procedure set_varstate(p:tnode;newstate:tvarstate;must_be_valid:boolean);
 | 
			
		||||
 | 
			
		||||
    { sets the callunique flag, if the node is a vecn, }
 | 
			
		||||
    { takes care of type casts etc.                 }
 | 
			
		||||
@ -118,8 +112,8 @@ implementation
 | 
			
		||||
    uses
 | 
			
		||||
       globtype,systems,
 | 
			
		||||
       cutils,verbose,globals,
 | 
			
		||||
       symconst,symsym,symtable,
 | 
			
		||||
       defutil,defcmp,cpubase,
 | 
			
		||||
       symsym,symtable,
 | 
			
		||||
       defutil,defcmp,
 | 
			
		||||
       ncnv,nld,
 | 
			
		||||
       nmem,ncal,nmat,
 | 
			
		||||
       cgbase,procinfo
 | 
			
		||||
@ -580,7 +574,7 @@ implementation
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure set_varstate(p : tnode;must_be_valid : boolean);
 | 
			
		||||
    procedure set_varstate(p:tnode;newstate:tvarstate;must_be_valid:boolean);
 | 
			
		||||
      var
 | 
			
		||||
        hsym : tvarsym;
 | 
			
		||||
      begin
 | 
			
		||||
@ -607,72 +601,44 @@ implementation
 | 
			
		||||
               p:=tunarynode(p).left;
 | 
			
		||||
             vecn:
 | 
			
		||||
               begin
 | 
			
		||||
                 set_varstate(tbinarynode(p).right,true);
 | 
			
		||||
                 set_varstate(tbinarynode(p).right,vs_used,true);
 | 
			
		||||
                 if not(tunarynode(p).left.resulttype.def.deftype in [stringdef,arraydef]) then
 | 
			
		||||
                  must_be_valid:=true;
 | 
			
		||||
                   must_be_valid:=true;
 | 
			
		||||
                 p:=tunarynode(p).left;
 | 
			
		||||
               end;
 | 
			
		||||
             { do not parse calln }
 | 
			
		||||
             calln :
 | 
			
		||||
               break;
 | 
			
		||||
             callparan :
 | 
			
		||||
               begin
 | 
			
		||||
                 set_varstate(tbinarynode(p).right,must_be_valid);
 | 
			
		||||
                 p:=tunarynode(p).left;
 | 
			
		||||
               end;
 | 
			
		||||
             loadn :
 | 
			
		||||
               begin
 | 
			
		||||
                 if (tloadnode(p).symtableentry.typ=varsym) then
 | 
			
		||||
                  begin
 | 
			
		||||
                    hsym:=tvarsym(tloadnode(p).symtableentry);
 | 
			
		||||
                    if must_be_valid and (nf_first_use in p.flags) then
 | 
			
		||||
                     begin
 | 
			
		||||
                       if (hsym.varstate=vs_declared_and_first_found) or
 | 
			
		||||
                          (hsym.varstate=vs_set_but_first_not_passed) then
 | 
			
		||||
                        begin
 | 
			
		||||
                          if (assigned(hsym.owner) and
 | 
			
		||||
                              assigned(current_procinfo) and
 | 
			
		||||
                              (hsym.owner=current_procinfo.procdef.localst)) then
 | 
			
		||||
                           begin
 | 
			
		||||
                             if (vo_is_funcret in hsym.varoptions) then
 | 
			
		||||
                               CGMessage(sym_w_function_result_not_set)
 | 
			
		||||
                             else
 | 
			
		||||
                              if tloadnode(p).symtable.symtabletype=localsymtable then
 | 
			
		||||
                               CGMessage1(sym_n_uninitialized_local_variable,hsym.realname)
 | 
			
		||||
                             else
 | 
			
		||||
                               CGMessage1(sym_n_uninitialized_variable,hsym.realname);
 | 
			
		||||
                           end;
 | 
			
		||||
                        end;
 | 
			
		||||
                     end;
 | 
			
		||||
                    if (nf_first_use in p.flags) then
 | 
			
		||||
                     begin
 | 
			
		||||
                       if hsym.varstate=vs_declared_and_first_found then
 | 
			
		||||
                        begin
 | 
			
		||||
                          { this can only happen at left of an assignment, no ? PM }
 | 
			
		||||
                          if (parsing_para_level=0) and not must_be_valid then
 | 
			
		||||
                           hsym.varstate:=vs_assigned
 | 
			
		||||
                          else
 | 
			
		||||
                           hsym.varstate:=vs_used;
 | 
			
		||||
                        end
 | 
			
		||||
                       else
 | 
			
		||||
                        if hsym.varstate=vs_set_but_first_not_passed then
 | 
			
		||||
                         hsym.varstate:=vs_used;
 | 
			
		||||
                       exclude(p.flags,nf_first_use);
 | 
			
		||||
                     end
 | 
			
		||||
                    else
 | 
			
		||||
                    if must_be_valid and (hsym.varstate=vs_declared) then
 | 
			
		||||
                      begin
 | 
			
		||||
                        if (hsym.varstate=vs_assigned) and
 | 
			
		||||
                           (must_be_valid or (parsing_para_level>0) or
 | 
			
		||||
                            (p.resulttype.def.deftype=procvardef)) then
 | 
			
		||||
                          hsym.varstate:=vs_used;
 | 
			
		||||
                        if (hsym.varstate=vs_declared_and_first_found) and
 | 
			
		||||
                           (must_be_valid or (parsing_para_level>0) or
 | 
			
		||||
                           (p.resulttype.def.deftype=procvardef)) then
 | 
			
		||||
                          hsym.varstate:=vs_set_but_first_not_passed;
 | 
			
		||||
                        { Give warning/note for uninitialized locals }
 | 
			
		||||
                        if assigned(hsym.owner) and
 | 
			
		||||
                           not(vo_is_external in hsym.varoptions) and
 | 
			
		||||
                           (hsym.owner.symtabletype=localsymtable) and
 | 
			
		||||
                           (hsym.owner=current_procinfo.procdef.localst) then
 | 
			
		||||
                          begin
 | 
			
		||||
                            if (vo_is_funcret in hsym.varoptions) then
 | 
			
		||||
                               CGMessage(sym_w_function_result_not_set)
 | 
			
		||||
                            else
 | 
			
		||||
                             if tloadnode(p).symtable.symtabletype=localsymtable then
 | 
			
		||||
                               CGMessage1(sym_n_uninitialized_local_variable,hsym.realname)
 | 
			
		||||
                            else
 | 
			
		||||
                              CGMessage1(sym_n_uninitialized_variable,hsym.realname);
 | 
			
		||||
                          end;
 | 
			
		||||
                      end;
 | 
			
		||||
                    { don't override vs_used with vs_assigned }
 | 
			
		||||
                    if hsym.varstate<>vs_used then
 | 
			
		||||
                      hsym.varstate:=newstate;
 | 
			
		||||
                  end;
 | 
			
		||||
                 break;
 | 
			
		||||
               end;
 | 
			
		||||
             callparan :
 | 
			
		||||
               internalerror(200310081);
 | 
			
		||||
             else
 | 
			
		||||
               break;
 | 
			
		||||
           end;{case }
 | 
			
		||||
@ -680,23 +646,6 @@ implementation
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure unset_varstate(p : tnode);
 | 
			
		||||
      begin
 | 
			
		||||
        while assigned(p) do
 | 
			
		||||
         begin
 | 
			
		||||
           exclude(p.flags,nf_varstateset);
 | 
			
		||||
           case p.nodetype of
 | 
			
		||||
             typeconvn,
 | 
			
		||||
             subscriptn,
 | 
			
		||||
             vecn :
 | 
			
		||||
               p:=tunarynode(p).left;
 | 
			
		||||
             else
 | 
			
		||||
               break;
 | 
			
		||||
           end;
 | 
			
		||||
         end;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    procedure set_unique(p : tnode);
 | 
			
		||||
      begin
 | 
			
		||||
        while assigned(p) do
 | 
			
		||||
@ -918,9 +867,6 @@ implementation
 | 
			
		||||
                        end
 | 
			
		||||
                       else
 | 
			
		||||
                        begin
 | 
			
		||||
                          { set the assigned flag for varsyms }
 | 
			
		||||
                          if (tvarsym(tloadnode(hp).symtableentry).varstate=vs_declared) then
 | 
			
		||||
                           tvarsym(tloadnode(hp).symtableentry).varstate:=vs_assigned;
 | 
			
		||||
                          valid_for_assign:=true;
 | 
			
		||||
                          exit;
 | 
			
		||||
                        end;
 | 
			
		||||
@ -995,7 +941,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.68  2003-10-05 21:21:52  peter
 | 
			
		||||
  Revision 1.69  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.68  2003/10/05 21:21:52  peter
 | 
			
		||||
    * c style array of const generates callparanodes
 | 
			
		||||
    * varargs paraloc fixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -78,7 +78,7 @@ implementation
 | 
			
		||||
      {$ifdef state_tracking}
 | 
			
		||||
      nstate,
 | 
			
		||||
      {$endif}
 | 
			
		||||
      cpubase,cpuinfo,procinfo;
 | 
			
		||||
      cpuinfo,procinfo;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{*****************************************************************************
 | 
			
		||||
@ -124,8 +124,8 @@ implementation
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         { both left and right need to be valid }
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -1526,7 +1526,9 @@ implementation
 | 
			
		||||
 | 
			
		||||
    function taddnode.pass_1 : tnode;
 | 
			
		||||
      var
 | 
			
		||||
{$ifdef addstringopt}
 | 
			
		||||
         hp      : tnode;
 | 
			
		||||
{$endif addstringopt}
 | 
			
		||||
         lt,rt   : tnodetype;
 | 
			
		||||
         rd,ld   : tdef;
 | 
			
		||||
      begin
 | 
			
		||||
@ -1873,7 +1875,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.96  2003-10-01 20:34:48  peter
 | 
			
		||||
  Revision 1.97  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.96  2003/10/01 20:34:48  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -640,13 +640,13 @@ type
 | 
			
		||||
                   floatdef :
 | 
			
		||||
                     inserttypeconv(left,s64floattype);
 | 
			
		||||
                 end;
 | 
			
		||||
                 set_varstate(left,true);
 | 
			
		||||
                 set_varstate(left,vs_used,true);
 | 
			
		||||
                 resulttype:=left.resulttype;
 | 
			
		||||
               end
 | 
			
		||||
             else
 | 
			
		||||
              if (paraitem.is_hidden) then
 | 
			
		||||
               begin
 | 
			
		||||
                 set_varstate(left,true);
 | 
			
		||||
                 set_varstate(left,vs_used,true);
 | 
			
		||||
                 resulttype:=left.resulttype;
 | 
			
		||||
               end
 | 
			
		||||
             else
 | 
			
		||||
@ -776,10 +776,10 @@ type
 | 
			
		||||
 | 
			
		||||
                 if do_count then
 | 
			
		||||
                  begin
 | 
			
		||||
                    { not completly proper, but avoids some warnings }
 | 
			
		||||
                    {if (paraitem.paratyp in [vs_var,vs_out]) then
 | 
			
		||||
                     set_funcret_is_valid(left); }
 | 
			
		||||
                    set_varstate(left,not(paraitem.paratyp in [vs_var,vs_out]));
 | 
			
		||||
                    if paraitem.paratyp in [vs_var,vs_out] then
 | 
			
		||||
                      set_varstate(left,vs_used,false)
 | 
			
		||||
                    else
 | 
			
		||||
                      set_varstate(left,vs_used,true);
 | 
			
		||||
                  end;
 | 
			
		||||
                 { must only be done after typeconv PM }
 | 
			
		||||
                 resulttype:=paraitem.paratype;
 | 
			
		||||
@ -1995,7 +1995,7 @@ type
 | 
			
		||||
         { procedure variable ? }
 | 
			
		||||
         if assigned(right) then
 | 
			
		||||
           begin
 | 
			
		||||
              set_varstate(right,true);
 | 
			
		||||
              set_varstate(right,vs_used,true);
 | 
			
		||||
              resulttypepass(right);
 | 
			
		||||
              if codegenerror then
 | 
			
		||||
               exit;
 | 
			
		||||
@ -2271,7 +2271,7 @@ type
 | 
			
		||||
                 method_must_be_valid:=false
 | 
			
		||||
               else
 | 
			
		||||
                 method_must_be_valid:=true;
 | 
			
		||||
               set_varstate(methodpointer,method_must_be_valid);
 | 
			
		||||
               set_varstate(methodpointer,vs_used,method_must_be_valid);
 | 
			
		||||
 | 
			
		||||
               { The object is already used if it is called once }
 | 
			
		||||
               if (hpt.nodetype=loadn) and
 | 
			
		||||
@ -2609,7 +2609,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.192  2003-10-07 21:14:32  peter
 | 
			
		||||
  Revision 1.193  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.192  2003/10/07 21:14:32  peter
 | 
			
		||||
    * compare_paras() has a parameter to ignore hidden parameters
 | 
			
		||||
    * cross unit overload searching ignores hidden parameters when
 | 
			
		||||
      comparing parameter lists. Now function(string):string is
 | 
			
		||||
 | 
			
		||||
@ -448,7 +448,7 @@ implementation
 | 
			
		||||
        begin
 | 
			
		||||
          location_reset(location,LOC_REGISTER,OS_ADDR);
 | 
			
		||||
          location.register:=rg.getaddressregister(exprasmlist);
 | 
			
		||||
          reference_reset_symbol(href,tstoreddef(ttypenode(tcallparanode(left).left).resulttype.def).get_rtti_label(fullrtti),0);
 | 
			
		||||
          reference_reset_symbol(href,tstoreddef(left.resulttype.def).get_rtti_label(fullrtti),0);
 | 
			
		||||
          cg.a_loadaddr_ref_reg(exprasmlist,href,location.register);
 | 
			
		||||
        end;
 | 
			
		||||
 | 
			
		||||
@ -656,7 +656,10 @@ end.
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.44  2003-10-05 21:21:52  peter
 | 
			
		||||
  Revision 1.45  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.44  2003/10/05 21:21:52  peter
 | 
			
		||||
    * c style array of const generates callparanodes
 | 
			
		||||
    * varargs paraloc fixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1858,8 +1858,8 @@ implementation
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
@ -1967,8 +1967,8 @@ implementation
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
@ -2104,7 +2104,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.121  2003-10-07 14:30:27  peter
 | 
			
		||||
  Revision 1.122  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.121  2003/10/07 14:30:27  peter
 | 
			
		||||
    * fix 2720
 | 
			
		||||
 | 
			
		||||
  Revision 1.120  2003/10/01 20:34:48  peter
 | 
			
		||||
 | 
			
		||||
@ -380,7 +380,7 @@ implementation
 | 
			
		||||
         { loop instruction }
 | 
			
		||||
         if assigned(right) then
 | 
			
		||||
           resulttypepass(right);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
         if not is_boolean(left.resulttype.def) then
 | 
			
		||||
@ -543,7 +543,7 @@ implementation
 | 
			
		||||
         { else path }
 | 
			
		||||
         if assigned(t1) then
 | 
			
		||||
           resulttypepass(t1);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -699,7 +699,7 @@ implementation
 | 
			
		||||
         t2:=tassignmentnode(left).left.getcopy;
 | 
			
		||||
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,false);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
 | 
			
		||||
         if assigned(t1) then
 | 
			
		||||
           begin
 | 
			
		||||
@ -710,7 +710,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
         { process count var }
 | 
			
		||||
         resulttypepass(t2);
 | 
			
		||||
         set_varstate(t2,true);
 | 
			
		||||
         set_varstate(t2,vs_used,false);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -749,7 +749,7 @@ implementation
 | 
			
		||||
           CGMessagePos(hp.fileinfo,cg_e_illegal_count_var);
 | 
			
		||||
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         inserttypeconv(right,t2.resulttype);
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
@ -864,7 +864,7 @@ implementation
 | 
			
		||||
                cloadnode.create(current_procinfo.procdef.funcretsym,current_procinfo.procdef.funcretsym.owner),
 | 
			
		||||
                left);
 | 
			
		||||
            resulttypepass(left);
 | 
			
		||||
            set_varstate(left,true);
 | 
			
		||||
            set_varstate(left,vs_used,true);
 | 
			
		||||
          end;
 | 
			
		||||
        resulttype:=voidtype;
 | 
			
		||||
      end;
 | 
			
		||||
@ -1166,7 +1166,7 @@ implementation
 | 
			
		||||
           begin
 | 
			
		||||
              { first para must be a _class_ }
 | 
			
		||||
              resulttypepass(left);
 | 
			
		||||
              set_varstate(left,true);
 | 
			
		||||
              set_varstate(left,vs_used,true);
 | 
			
		||||
              if codegenerror then
 | 
			
		||||
               exit;
 | 
			
		||||
              if not(is_class(left.resulttype.def)) then
 | 
			
		||||
@ -1293,16 +1293,16 @@ implementation
 | 
			
		||||
         resulttype:=voidtype;
 | 
			
		||||
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
 | 
			
		||||
         { special finally block only executed when there was an exception }
 | 
			
		||||
         if assigned(t1) then
 | 
			
		||||
           begin
 | 
			
		||||
             resulttypepass(t1);
 | 
			
		||||
             set_varstate(t1,true);
 | 
			
		||||
             set_varstate(t1,vs_used,true);
 | 
			
		||||
           end;
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
@ -1431,7 +1431,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.81  2003-10-05 11:53:57  florian
 | 
			
		||||
  Revision 1.82  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.81  2003/10/05 11:53:57  florian
 | 
			
		||||
    * writing of loop nodes fixed
 | 
			
		||||
 | 
			
		||||
  Revision 1.80  2003/10/01 20:34:48  peter
 | 
			
		||||
 | 
			
		||||
@ -75,7 +75,7 @@ implementation
 | 
			
		||||
      symbase,symconst,symtype,symdef,symsym,symtable,paramgr,defutil,defcmp,
 | 
			
		||||
      pass_1,
 | 
			
		||||
      ncal,ncon,ncnv,nadd,nld,nbas,nflw,nmem,nmat,
 | 
			
		||||
      cpubase,cgbase,procinfo
 | 
			
		||||
      cgbase,procinfo
 | 
			
		||||
      ;
 | 
			
		||||
 | 
			
		||||
   function geninlinenode(number : byte;is_const:boolean;l : tnode) : tinlinenode;
 | 
			
		||||
@ -397,7 +397,7 @@ implementation
 | 
			
		||||
            left := filepara.right;
 | 
			
		||||
            filepara.right := nil;
 | 
			
		||||
            { the file para is a var parameter, but it must be valid already }
 | 
			
		||||
            set_varstate(filepara,true);
 | 
			
		||||
            set_varstate(filepara.left,vs_used,true);
 | 
			
		||||
            { check if we should make a temp to store the result of a complex }
 | 
			
		||||
            { expression (better heuristics, anyone?) (JM)                    }
 | 
			
		||||
            if (filepara.left.nodetype <> loadn) then
 | 
			
		||||
@ -1380,7 +1380,7 @@ implementation
 | 
			
		||||
                     result:=hp;
 | 
			
		||||
                     goto myexit;
 | 
			
		||||
                   end;
 | 
			
		||||
                  set_varstate(left,true);
 | 
			
		||||
                  set_varstate(left,vs_used,true);
 | 
			
		||||
                  if not is_integer(left.resulttype.def) then
 | 
			
		||||
                   CGMessage(type_e_mismatch);
 | 
			
		||||
                  case inlinenumber of
 | 
			
		||||
@ -1399,7 +1399,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
              in_sizeof_x:
 | 
			
		||||
                begin
 | 
			
		||||
                  set_varstate(left,false);
 | 
			
		||||
                  set_varstate(left,vs_used,false);
 | 
			
		||||
                  if paramanager.push_high_param(vs_value,left.resulttype.def,current_procinfo.procdef.proccalloption) then
 | 
			
		||||
                   begin
 | 
			
		||||
                     hightree:=load_high_value_node(tvarsym(tloadnode(left).symtableentry));
 | 
			
		||||
@ -1420,7 +1420,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
              in_typeof_x:
 | 
			
		||||
                begin
 | 
			
		||||
                  set_varstate(left,false);
 | 
			
		||||
                  set_varstate(left,vs_used,false);
 | 
			
		||||
                  resulttype:=voidpointertype;
 | 
			
		||||
                end;
 | 
			
		||||
 | 
			
		||||
@ -1433,7 +1433,7 @@ implementation
 | 
			
		||||
                      result:=hp;
 | 
			
		||||
                      goto myexit;
 | 
			
		||||
                    end;
 | 
			
		||||
                   set_varstate(left,true);
 | 
			
		||||
                   set_varstate(left,vs_used,true);
 | 
			
		||||
                   case left.resulttype.def.deftype of
 | 
			
		||||
                     orddef :
 | 
			
		||||
                       begin
 | 
			
		||||
@ -1486,7 +1486,7 @@ implementation
 | 
			
		||||
              in_chr_byte:
 | 
			
		||||
                begin
 | 
			
		||||
                   { convert to explicit char() }
 | 
			
		||||
                   set_varstate(left,true);
 | 
			
		||||
                   set_varstate(left,vs_used,true);
 | 
			
		||||
                   hp:=ctypeconvnode.create_explicit(left,cchartype);
 | 
			
		||||
                   left:=nil;
 | 
			
		||||
                   result:=hp;
 | 
			
		||||
@ -1494,7 +1494,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
              in_length_x:
 | 
			
		||||
                begin
 | 
			
		||||
                  set_varstate(left,true);
 | 
			
		||||
                  set_varstate(left,vs_used,true);
 | 
			
		||||
 | 
			
		||||
                  case left.resulttype.def.deftype of
 | 
			
		||||
                    stringdef :
 | 
			
		||||
@ -1601,7 +1601,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
              in_typeinfo_x:
 | 
			
		||||
                begin
 | 
			
		||||
                   set_varstate(left,true);
 | 
			
		||||
                   set_varstate(left,vs_used,true);
 | 
			
		||||
                   resulttype:=voidpointertype;
 | 
			
		||||
                end;
 | 
			
		||||
 | 
			
		||||
@ -1622,7 +1622,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
              in_seg_x :
 | 
			
		||||
                begin
 | 
			
		||||
                  set_varstate(left,false);
 | 
			
		||||
                  set_varstate(left,vs_used,false);
 | 
			
		||||
                  hp:=cordconstnode.create(0,s32bittype,false);
 | 
			
		||||
                  result:=hp;
 | 
			
		||||
                  goto myexit;
 | 
			
		||||
@ -1631,7 +1631,7 @@ implementation
 | 
			
		||||
              in_pred_x,
 | 
			
		||||
              in_succ_x:
 | 
			
		||||
                begin
 | 
			
		||||
                   set_varstate(left,true);
 | 
			
		||||
                   set_varstate(left,vs_used,true);
 | 
			
		||||
                   resulttype:=left.resulttype;
 | 
			
		||||
                   if not is_ordinal(resulttype.def) then
 | 
			
		||||
                     CGMessage(type_e_ordinal_expr_expected)
 | 
			
		||||
@ -1672,11 +1672,9 @@ implementation
 | 
			
		||||
                  resulttype:=voidtype;
 | 
			
		||||
                  if assigned(left) then
 | 
			
		||||
                    begin
 | 
			
		||||
                       set_varstate(left,true);
 | 
			
		||||
                       if codegenerror then
 | 
			
		||||
                        exit;
 | 
			
		||||
                       { first param must be var }
 | 
			
		||||
                       valid_for_var(tcallparanode(left).left);
 | 
			
		||||
                       set_varstate(tcallparanode(left).left,vs_used,true);
 | 
			
		||||
 | 
			
		||||
                       if (left.resulttype.def.deftype in [enumdef,pointerdef]) or
 | 
			
		||||
                          is_ordinal(left.resulttype.def) or
 | 
			
		||||
@ -1687,6 +1685,7 @@ implementation
 | 
			
		||||
                          { two paras ? }
 | 
			
		||||
                          if assigned(tcallparanode(left).right) then
 | 
			
		||||
                           begin
 | 
			
		||||
                             set_varstate(tcallparanode(tcallparanode(left).right).left,vs_used,true);
 | 
			
		||||
                             if (aktlocalswitches *
 | 
			
		||||
                                   [cs_check_overflow,cs_check_range] = []) then
 | 
			
		||||
                               begin
 | 
			
		||||
@ -1761,14 +1760,15 @@ implementation
 | 
			
		||||
                  resulttype:=voidtype;
 | 
			
		||||
                  { the parser already checks whether we have two (and exectly two) }
 | 
			
		||||
                  { parameters (JM)                                                 }
 | 
			
		||||
                  set_varstate(left,true);
 | 
			
		||||
                  { first param must be var }
 | 
			
		||||
                  valid_for_var(tcallparanode(left).left);
 | 
			
		||||
                  set_varstate(tcallparanode(left).left,vs_used,true);
 | 
			
		||||
                  { check type }
 | 
			
		||||
                  if (left.resulttype.def.deftype=setdef) then
 | 
			
		||||
                    begin
 | 
			
		||||
                      { insert a type conversion       }
 | 
			
		||||
                      { to the type of the set elements  }
 | 
			
		||||
                      set_varstate(tcallparanode(tcallparanode(left).right).left,vs_used,true);
 | 
			
		||||
                      inserttypeconv(tcallparanode(tcallparanode(left).right).left,
 | 
			
		||||
                        tsetdef(left.resulttype.def).elementtype);
 | 
			
		||||
                    end
 | 
			
		||||
@ -1779,7 +1779,7 @@ implementation
 | 
			
		||||
              in_low_x,
 | 
			
		||||
              in_high_x:
 | 
			
		||||
                begin
 | 
			
		||||
                  set_varstate(left,false);
 | 
			
		||||
                  set_varstate(left,vs_used,false);
 | 
			
		||||
                  case left.resulttype.def.deftype of
 | 
			
		||||
                    orddef,
 | 
			
		||||
                    enumdef:
 | 
			
		||||
@ -1854,7 +1854,7 @@ implementation
 | 
			
		||||
                   setconstrealvalue(cos(getconstrealvalue))
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1866,7 +1866,7 @@ implementation
 | 
			
		||||
                   setconstrealvalue(sin(getconstrealvalue))
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1878,7 +1878,7 @@ implementation
 | 
			
		||||
                   setconstrealvalue(arctan(getconstrealvalue))
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1890,7 +1890,7 @@ implementation
 | 
			
		||||
                   setconstrealvalue(abs(getconstrealvalue))
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1902,7 +1902,7 @@ implementation
 | 
			
		||||
                   setconstrealvalue(sqr(getconstrealvalue))
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1920,7 +1920,7 @@ implementation
 | 
			
		||||
                   end
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1938,7 +1938,7 @@ implementation
 | 
			
		||||
                   end
 | 
			
		||||
                  else
 | 
			
		||||
                   begin
 | 
			
		||||
                     set_varstate(left,true);
 | 
			
		||||
                     set_varstate(left,vs_used,true);
 | 
			
		||||
                     inserttypeconv(left,pbestrealtype^);
 | 
			
		||||
                     resulttype:=pbestrealtype^;
 | 
			
		||||
                   end;
 | 
			
		||||
@ -1955,10 +1955,11 @@ implementation
 | 
			
		||||
                  resulttype:=voidtype;
 | 
			
		||||
                  if assigned(left) then
 | 
			
		||||
                    begin
 | 
			
		||||
                       set_varstate(left,true);
 | 
			
		||||
                       set_varstate(tcallparanode(left).left,vs_used,true);
 | 
			
		||||
                       { check type }
 | 
			
		||||
                       if is_boolean(left.resulttype.def) then
 | 
			
		||||
                         begin
 | 
			
		||||
                            set_varstate(tcallparanode(tcallparanode(left).right).left,vs_used,true);
 | 
			
		||||
                            { must always be a string }
 | 
			
		||||
                            inserttypeconv(tcallparanode(tcallparanode(left).right).left,cshortstringtype);
 | 
			
		||||
                         end
 | 
			
		||||
@ -2357,7 +2358,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.119  2003-10-01 20:34:48  peter
 | 
			
		||||
  Revision 1.120  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.119  2003/10/01 20:34:48  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -657,9 +657,8 @@ implementation
 | 
			
		||||
          end;
 | 
			
		||||
 | 
			
		||||
        resulttypepass(right);
 | 
			
		||||
        set_varstate(left,false);
 | 
			
		||||
        set_varstate(right,true);
 | 
			
		||||
{        set_funcret_is_valid(left); }
 | 
			
		||||
        set_varstate(left,vs_assigned,false);
 | 
			
		||||
        set_varstate(right,vs_used,true);
 | 
			
		||||
        if codegenerror then
 | 
			
		||||
          exit;
 | 
			
		||||
 | 
			
		||||
@ -894,8 +893,8 @@ implementation
 | 
			
		||||
        result:=nil;
 | 
			
		||||
        resulttypepass(left);
 | 
			
		||||
        resulttypepass(right);
 | 
			
		||||
        set_varstate(left,true);
 | 
			
		||||
        set_varstate(right,true);
 | 
			
		||||
        set_varstate(left,vs_used,true);
 | 
			
		||||
        set_varstate(right,vs_used,true);
 | 
			
		||||
        if codegenerror then
 | 
			
		||||
         exit;
 | 
			
		||||
        resulttype:=left.resulttype;
 | 
			
		||||
@ -959,7 +958,7 @@ implementation
 | 
			
		||||
           while assigned(hp) do
 | 
			
		||||
            begin
 | 
			
		||||
              resulttypepass(hp.left);
 | 
			
		||||
              set_varstate(hp.left,true);
 | 
			
		||||
              set_varstate(hp.left,vs_used,true);
 | 
			
		||||
              if (htype.def=nil) then
 | 
			
		||||
               htype:=hp.left.resulttype
 | 
			
		||||
              else
 | 
			
		||||
@ -1247,7 +1246,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.109  2003-10-05 21:21:52  peter
 | 
			
		||||
  Revision 1.110  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.109  2003/10/05 21:21:52  peter
 | 
			
		||||
    * c style array of const generates callparanodes
 | 
			
		||||
    * varargs paraloc fixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -102,8 +102,8 @@ implementation
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -431,8 +431,8 @@ implementation
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -516,7 +516,7 @@ implementation
 | 
			
		||||
      begin
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -649,7 +649,7 @@ implementation
 | 
			
		||||
      begin
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -831,7 +831,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.52  2003-10-01 20:34:49  peter
 | 
			
		||||
  Revision 1.53  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.52  2003/10/01 20:34:49  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -401,7 +401,7 @@ implementation
 | 
			
		||||
 | 
			
		||||
         { this is like the function addr }
 | 
			
		||||
         inc(parsing_para_level);
 | 
			
		||||
         set_varstate(left,false);
 | 
			
		||||
         set_varstate(left,vs_used,false);
 | 
			
		||||
         dec(parsing_para_level);
 | 
			
		||||
 | 
			
		||||
      end;
 | 
			
		||||
@ -462,7 +462,7 @@ implementation
 | 
			
		||||
      begin
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
          exit;
 | 
			
		||||
 | 
			
		||||
@ -842,8 +842,8 @@ implementation
 | 
			
		||||
        resulttype:=voidtype;
 | 
			
		||||
 | 
			
		||||
        resulttypepass(withrefnode);
 | 
			
		||||
        unset_varstate(withrefnode);
 | 
			
		||||
        set_varstate(withrefnode,true);
 | 
			
		||||
        //unset_varstate(withrefnode);
 | 
			
		||||
        set_varstate(withrefnode,vs_used,true);
 | 
			
		||||
        if codegenerror then
 | 
			
		||||
         exit;
 | 
			
		||||
 | 
			
		||||
@ -904,7 +904,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.64  2003-10-01 20:34:49  peter
 | 
			
		||||
  Revision 1.65  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.64  2003/10/01 20:34:49  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -201,7 +201,6 @@ interface
 | 
			
		||||
 | 
			
		||||
         { general }
 | 
			
		||||
         nf_write,       { Node is written to            }
 | 
			
		||||
         nf_first_use,   { First node that uses a variable after declared }
 | 
			
		||||
         nf_varstateset,
 | 
			
		||||
         nf_isproperty,
 | 
			
		||||
 | 
			
		||||
@ -977,7 +976,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.68  2003-10-01 20:34:49  peter
 | 
			
		||||
  Revision 1.69  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.68  2003/10/01 20:34:49  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -118,7 +118,7 @@ implementation
 | 
			
		||||
      verbose,
 | 
			
		||||
      symconst,symdef,symsym,defutil,defcmp,
 | 
			
		||||
      htypechk,pass_1,
 | 
			
		||||
      nbas,ncnv,ncon,cpubase,nld,rgobj,cgbase;
 | 
			
		||||
      nbas,ncnv,ncon,nld,rgobj,cgbase;
 | 
			
		||||
 | 
			
		||||
    function gencasenode(l,r : tnode;nodes : pcaserecord) : tnode;
 | 
			
		||||
 | 
			
		||||
@ -147,7 +147,7 @@ implementation
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         if assigned(right) then
 | 
			
		||||
          resulttypepass(right);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
          exit;
 | 
			
		||||
 | 
			
		||||
@ -216,7 +216,7 @@ implementation
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttype:=booltype;
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
          exit;
 | 
			
		||||
 | 
			
		||||
@ -243,7 +243,7 @@ implementation
 | 
			
		||||
           end;
 | 
			
		||||
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
 | 
			
		||||
@ -341,8 +341,8 @@ implementation
 | 
			
		||||
         result:=nil;
 | 
			
		||||
         resulttypepass(left);
 | 
			
		||||
         resulttypepass(right);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(right,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         set_varstate(right,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
         { both types must be compatible }
 | 
			
		||||
@ -572,7 +572,7 @@ implementation
 | 
			
		||||
         expectloc:=LOC_VOID;
 | 
			
		||||
         { evalutes the case expression }
 | 
			
		||||
         firstpass(left);
 | 
			
		||||
         set_varstate(left,true);
 | 
			
		||||
         set_varstate(left,vs_used,true);
 | 
			
		||||
         if codegenerror then
 | 
			
		||||
           exit;
 | 
			
		||||
         registers32:=left.registers32;
 | 
			
		||||
@ -686,7 +686,10 @@ begin
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.45  2003-10-01 20:34:49  peter
 | 
			
		||||
  Revision 1.46  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.45  2003/10/01 20:34:49  peter
 | 
			
		||||
    * procinfo unit contains tprocinfo
 | 
			
		||||
    * cginfo renamed to cgbase
 | 
			
		||||
    * moved cgmessage to verbose
 | 
			
		||||
 | 
			
		||||
@ -366,8 +366,7 @@ implementation
 | 
			
		||||
                   Message(parser_e_illegal_parameter_list);
 | 
			
		||||
                end;
 | 
			
		||||
              consume(_RKLAMMER);
 | 
			
		||||
              p2:=ccallparanode.create(p1,nil);
 | 
			
		||||
              p2:=geninlinenode(in_typeinfo_x,false,p2);
 | 
			
		||||
              p2:=geninlinenode(in_typeinfo_x,false,p1);
 | 
			
		||||
              statement_syssym:=p2;
 | 
			
		||||
            end;
 | 
			
		||||
 | 
			
		||||
@ -511,7 +510,7 @@ implementation
 | 
			
		||||
              while true do
 | 
			
		||||
               begin
 | 
			
		||||
                 p1:=comp_expr(true);
 | 
			
		||||
                 set_varstate(p1,true);
 | 
			
		||||
                 set_varstate(p1,vs_used,true);
 | 
			
		||||
                 if not((p1.resulttype.def.deftype=stringdef) or
 | 
			
		||||
                        ((p1.resulttype.def.deftype=orddef) and
 | 
			
		||||
                         (torddef(p1.resulttype.def).typ=uchar))) then
 | 
			
		||||
@ -1194,13 +1193,6 @@ implementation
 | 
			
		||||
                      else
 | 
			
		||||
                        p1:=cloadnode.create(srsym,srsymtable);
 | 
			
		||||
                    end;
 | 
			
		||||
 | 
			
		||||
                    if tvarsym(srsym).varstate=vs_declared then
 | 
			
		||||
                     begin
 | 
			
		||||
                       include(p1.flags,nf_first_use);
 | 
			
		||||
                       { set special between first loaded until checked in resulttypepass }
 | 
			
		||||
                       tvarsym(srsym).varstate:=vs_declared_and_first_found;
 | 
			
		||||
                     end;
 | 
			
		||||
                  end;
 | 
			
		||||
 | 
			
		||||
                typedconstsym :
 | 
			
		||||
@ -2425,7 +2417,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.132  2003-10-05 12:56:04  peter
 | 
			
		||||
  Revision 1.133  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.132  2003/10/05 12:56:04  peter
 | 
			
		||||
    * fix assigned(property)
 | 
			
		||||
 | 
			
		||||
  Revision 1.131  2003/10/02 21:15:31  peter
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,10 @@ implementation
 | 
			
		||||
        consume(_LKLAMMER);
 | 
			
		||||
        p:=comp_expr(true);
 | 
			
		||||
        { calc return type }
 | 
			
		||||
        set_varstate(p,(not is_new));
 | 
			
		||||
        if is_new then
 | 
			
		||||
          set_varstate(p,vs_assigned,false)
 | 
			
		||||
        else
 | 
			
		||||
          set_varstate(p,vs_used,true);
 | 
			
		||||
        { constructor,destructor specified }
 | 
			
		||||
        if try_to_consume(_COMMA) then
 | 
			
		||||
          begin
 | 
			
		||||
@ -415,7 +418,7 @@ implementation
 | 
			
		||||
           ppn:=tcallparanode(paras);
 | 
			
		||||
           while assigned(ppn.right) do
 | 
			
		||||
            begin
 | 
			
		||||
              set_varstate(ppn.left,true);
 | 
			
		||||
              set_varstate(ppn.left,vs_used,true);
 | 
			
		||||
              inserttypeconv(ppn.left,s32bittype);
 | 
			
		||||
              inc(counter);
 | 
			
		||||
              ppn:=tcallparanode(ppn.right);
 | 
			
		||||
@ -431,7 +434,7 @@ implementation
 | 
			
		||||
        destppn:=ppn.left;
 | 
			
		||||
        inc(parsing_para_level);
 | 
			
		||||
        valid_for_var(destppn);
 | 
			
		||||
        set_varstate(destppn,false);
 | 
			
		||||
        set_varstate(destppn,vs_assigned,false);
 | 
			
		||||
        dec(parsing_para_level);
 | 
			
		||||
        { first param must be a string or dynamic array ...}
 | 
			
		||||
        isarray:=is_dynamic_array(destppn.resulttype.def);
 | 
			
		||||
@ -685,7 +688,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.20  2003-10-02 21:15:31  peter
 | 
			
		||||
  Revision 1.21  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.20  2003/10/02 21:15:31  peter
 | 
			
		||||
    * protected visibility fixes
 | 
			
		||||
 | 
			
		||||
  Revision 1.19  2003/10/01 20:34:49  peter
 | 
			
		||||
 | 
			
		||||
@ -188,6 +188,7 @@ implementation
 | 
			
		||||
         caseexpr:=comp_expr(true);
 | 
			
		||||
         { determines result type }
 | 
			
		||||
         do_resulttypepass(caseexpr);
 | 
			
		||||
         set_varstate(caseexpr,vs_used,true);
 | 
			
		||||
         casedeferror:=false;
 | 
			
		||||
         casedef:=caseexpr.resulttype.def;
 | 
			
		||||
         if (not assigned(casedef)) or
 | 
			
		||||
@ -392,7 +393,7 @@ implementation
 | 
			
		||||
      begin
 | 
			
		||||
         p:=comp_expr(true);
 | 
			
		||||
         do_resulttypepass(p);
 | 
			
		||||
         set_varstate(p,false);
 | 
			
		||||
         set_varstate(p,vs_used,false);
 | 
			
		||||
         right:=nil;
 | 
			
		||||
         if (not codegenerror) and
 | 
			
		||||
            (p.resulttype.def.deftype in [objectdef,recorddef]) then
 | 
			
		||||
@ -1128,7 +1129,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.113  2003-10-07 20:06:37  peter
 | 
			
		||||
  Revision 1.114  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.113  2003/10/07 20:06:37  peter
 | 
			
		||||
    * set calling convention before assembler block is parsed
 | 
			
		||||
 | 
			
		||||
  Revision 1.112  2003/10/02 21:15:59  peter
 | 
			
		||||
 | 
			
		||||
@ -288,8 +288,7 @@ type
 | 
			
		||||
 | 
			
		||||
  { State of the variable, if it's declared, assigned or used }
 | 
			
		||||
  tvarstate=(vs_none,
 | 
			
		||||
    vs_declared,vs_declared_and_first_found,
 | 
			
		||||
    vs_set_but_first_not_passed,vs_assigned,vs_used
 | 
			
		||||
    vs_declared,vs_assigned,vs_used
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  tvarspez = (vs_value,vs_const,vs_var,vs_out);
 | 
			
		||||
@ -377,7 +376,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.67  2003-10-07 15:17:07  peter
 | 
			
		||||
  Revision 1.68  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.67  2003/10/07 15:17:07  peter
 | 
			
		||||
    * inline supported again, LOC_REFERENCEs are used to pass the
 | 
			
		||||
      parameters
 | 
			
		||||
    * inlineparasymtable,inlinelocalsymtable removed
 | 
			
		||||
 | 
			
		||||
@ -1643,7 +1643,7 @@ implementation
 | 
			
		||||
         highvarsym:=nil;
 | 
			
		||||
         defaultconstsym:=nil;
 | 
			
		||||
         refs:=0;
 | 
			
		||||
         varstate:=vs_used;
 | 
			
		||||
         varstate:=vs_declared;
 | 
			
		||||
         varoptions:=[];
 | 
			
		||||
      end;
 | 
			
		||||
 | 
			
		||||
@ -2676,7 +2676,10 @@ implementation
 | 
			
		||||
end.
 | 
			
		||||
{
 | 
			
		||||
  $Log$
 | 
			
		||||
  Revision 1.124  2003-10-07 21:14:33  peter
 | 
			
		||||
  Revision 1.125  2003-10-08 19:19:45  peter
 | 
			
		||||
    * set_varstate cleanup
 | 
			
		||||
 | 
			
		||||
  Revision 1.124  2003/10/07 21:14:33  peter
 | 
			
		||||
    * compare_paras() has a parameter to ignore hidden parameters
 | 
			
		||||
    * cross unit overload searching ignores hidden parameters when
 | 
			
		||||
      comparing parameter lists. Now function(string):string is
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user