mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 15:39:24 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			654 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			654 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
{
 | 
						|
    $Id$
 | 
						|
    Copyright (c) 1998-2000 by Florian Klaempfl, Pierre Muller
 | 
						|
 | 
						|
    Interface for the definition types of the symtable
 | 
						|
 | 
						|
    This program is free software; you can redistribute it and/or modify
 | 
						|
    it under the terms of the GNU General Public License as published by
 | 
						|
    the Free Software Foundation; either version 2 of the License, or
 | 
						|
    (at your option) any later version.
 | 
						|
 | 
						|
    This program is distributed in the hope that it will be useful,
 | 
						|
    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
    GNU General Public License for more details.
 | 
						|
 | 
						|
    You should have received a copy of the GNU General Public License
 | 
						|
    along with this program; if not, write to the Free Software
 | 
						|
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
						|
 ****************************************************************************
 | 
						|
}
 | 
						|
 | 
						|
{************************************************
 | 
						|
                    TDef
 | 
						|
************************************************}
 | 
						|
 | 
						|
       tdef = object(tsymtableentry)
 | 
						|
          deftype    : tdeftype;
 | 
						|
          typesym    : ptypesym;  { which type the definition was generated this def }
 | 
						|
 | 
						|
          has_inittable : boolean;
 | 
						|
          { adress of init informations }
 | 
						|
          inittable_label : pasmlabel;
 | 
						|
 | 
						|
          has_rtti   : boolean;
 | 
						|
          { address of rtti }
 | 
						|
          rtti_label : pasmlabel;
 | 
						|
 | 
						|
          nextglobal,
 | 
						|
          previousglobal : pdef;
 | 
						|
{$ifdef GDB}
 | 
						|
          globalnb       : word;
 | 
						|
          is_def_stab_written : tdefstabstatus;
 | 
						|
{$endif GDB}
 | 
						|
          constructor init;
 | 
						|
          constructor load;
 | 
						|
          destructor  done;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  typename:string;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  size:longint;virtual;
 | 
						|
          function  alignment:longint;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          function  is_in_current : boolean;
 | 
						|
          procedure correct_owner_symtable; { registers enumdef inside objects or
 | 
						|
                                              record directly in the owner symtable !! }
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
          function  NumberString:string;
 | 
						|
          procedure set_globalnb;virtual;
 | 
						|
          function  allstabstring : pchar;
 | 
						|
{$endif GDB}
 | 
						|
          { init. tables }
 | 
						|
          function  needs_inittable : boolean;virtual;
 | 
						|
          procedure generate_inittable;
 | 
						|
          function  get_inittable_label : pasmlabel;
 | 
						|
          { the default implemenation calls write_rtti_data     }
 | 
						|
          { if init and rtti data is different these procedures }
 | 
						|
          { must be overloaded                                  }
 | 
						|
          procedure write_init_data;virtual;
 | 
						|
          procedure write_child_init_data;virtual;
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_name;
 | 
						|
          function  get_rtti_label : string;virtual;
 | 
						|
          procedure generate_rtti;virtual;
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
          function is_intregable : boolean;
 | 
						|
          function is_fpuregable : boolean;
 | 
						|
       private
 | 
						|
          savesize  : longint;
 | 
						|
       end;
 | 
						|
 | 
						|
       targconvtyp = (act_convertable,act_equal,act_exact);
 | 
						|
 | 
						|
       tvarspez = (vs_value,vs_const,vs_var,vs_out);
 | 
						|
 | 
						|
       pparaitem = ^tparaitem;
 | 
						|
       tparaitem = object(tlinkedlist_item)
 | 
						|
          paratype     : ttype;
 | 
						|
          paratyp      : tvarspez;
 | 
						|
          argconvtyp   : targconvtyp;
 | 
						|
          convertlevel : byte;
 | 
						|
          register     : tregister;
 | 
						|
          defaultvalue : psym; { pconstsym }
 | 
						|
       end;
 | 
						|
 | 
						|
       { this is only here to override the count method,
 | 
						|
         which can't be used }
 | 
						|
       pparalinkedlist = ^tparalinkedlist;
 | 
						|
       tparalinkedlist = object(tlinkedlist)
 | 
						|
          function count:longint;
 | 
						|
       end;
 | 
						|
 | 
						|
       tfiletyp = (ft_text,ft_typed,ft_untyped);
 | 
						|
 | 
						|
       pfiledef = ^tfiledef;
 | 
						|
       tfiledef = object(tdef)
 | 
						|
          filetyp : tfiletyp;
 | 
						|
          typedfiletype : ttype;
 | 
						|
          constructor inittext;
 | 
						|
          constructor inituntyped;
 | 
						|
          constructor inittyped(const tt : ttype);
 | 
						|
          constructor inittypeddef(p : pdef);
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          procedure setsize;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
       end;
 | 
						|
 | 
						|
       pformaldef = ^tformaldef;
 | 
						|
       tformaldef = object(tdef)
 | 
						|
          constructor init;
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
       end;
 | 
						|
 | 
						|
       pforwarddef = ^tforwarddef;
 | 
						|
       tforwarddef = object(tdef)
 | 
						|
          tosymname : string;
 | 
						|
          forwardpos : tfileposinfo;
 | 
						|
          constructor init(const s:string;const pos : tfileposinfo);
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       perrordef = ^terrordef;
 | 
						|
       terrordef = object(tdef)
 | 
						|
          constructor init;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
{$endif GDB}
 | 
						|
       end;
 | 
						|
 | 
						|
       { tpointerdef and tclassrefdef should get a common
 | 
						|
         base class, but I derived tclassrefdef from tpointerdef
 | 
						|
         to avoid problems with bugs (FK)
 | 
						|
       }
 | 
						|
 | 
						|
       ppointerdef = ^tpointerdef;
 | 
						|
       tpointerdef = object(tdef)
 | 
						|
          pointertype : ttype;
 | 
						|
          is_far : boolean;
 | 
						|
          constructor init(const tt : ttype);
 | 
						|
          constructor initfar(const tt : ttype);
 | 
						|
          constructor initdef(p : pdef);
 | 
						|
          constructor initfardef(p : pdef);
 | 
						|
          constructor load;
 | 
						|
          destructor  done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          {private}
 | 
						|
          public
 | 
						|
            { I don't know the use of this FK }
 | 
						|
            pointertypeis_forwarddef: boolean;
 | 
						|
       end;
 | 
						|
 | 
						|
       pprocdef = ^tprocdef;
 | 
						|
       pimplementedinterfaces = ^timplementedinterfaces;
 | 
						|
 | 
						|
       pobjectdef = ^tobjectdef;
 | 
						|
       tobjectdef = object(tdef)
 | 
						|
          childof  : pobjectdef;
 | 
						|
          objname  : pstring;
 | 
						|
          symtable : psymtable;
 | 
						|
          objectoptions : tobjectoptions;
 | 
						|
          { to be able to have a variable vmt position }
 | 
						|
          { and no vmt field for objects without virtuals }
 | 
						|
          vmt_offset : longint;
 | 
						|
{$ifdef GDB}
 | 
						|
          classglobalnb,
 | 
						|
          classptrglobalnb : word;
 | 
						|
          writing_stabs : boolean;
 | 
						|
{$endif GDB}
 | 
						|
          objecttype : tobjectdeftype;
 | 
						|
          isiidguidvalid: boolean;
 | 
						|
          iidguid: TGUID;
 | 
						|
          iidstr: pstring;
 | 
						|
          lastvtableindex: longint;
 | 
						|
          { store implemented interfaces defs and name mappings }
 | 
						|
          implementedinterfaces: pimplementedinterfaces;
 | 
						|
 | 
						|
          constructor init(odt : tobjectdeftype; const n : string;c : pobjectdef);
 | 
						|
          constructor load;
 | 
						|
          destructor  done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  size : longint;virtual;
 | 
						|
          function  alignment:longint;virtual;
 | 
						|
          function  vmtmethodoffset(index:longint):longint;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          function  vmt_mangledname : string;
 | 
						|
          function  rtti_name : string;
 | 
						|
          procedure check_forwards;
 | 
						|
          function  is_related(d : pobjectdef) : boolean;
 | 
						|
          function  next_free_name_index : longint;
 | 
						|
          procedure insertvmt;
 | 
						|
          procedure set_parent(c : pobjectdef);
 | 
						|
          function searchdestructor : pprocdef;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
          procedure set_globalnb;virtual;
 | 
						|
          function  classnumberstring : string;
 | 
						|
          function  classptrnumberstring : string;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { init/final }
 | 
						|
          function  needs_inittable : boolean;virtual;
 | 
						|
          procedure write_init_data;virtual;
 | 
						|
          procedure write_child_init_data;virtual;
 | 
						|
          { rtti }
 | 
						|
          function  get_rtti_label : string;virtual;
 | 
						|
          procedure generate_rtti;virtual;
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
          function generate_field_table : pasmlabel;
 | 
						|
       end;
 | 
						|
 | 
						|
       timplementedinterfaces = object
 | 
						|
         constructor init;
 | 
						|
         destructor  done; virtual;
 | 
						|
 | 
						|
         function  count: longint;
 | 
						|
         function  interfaces(intfindex: longint): pobjectdef;
 | 
						|
         function  ioffsets(intfindex: longint): plongint;
 | 
						|
         function  searchintf(def: pdef): longint;
 | 
						|
         procedure addintf(def: pdef);
 | 
						|
 | 
						|
         procedure deref;
 | 
						|
         procedure addintfref(def: pdef);
 | 
						|
 | 
						|
         procedure clearmappings;
 | 
						|
         procedure addmappings(intfindex: longint; const name, newname: string);
 | 
						|
         function  getmappings(intfindex: longint; const name: string; var nextexist: pointer): string;
 | 
						|
 | 
						|
         procedure clearimplprocs;
 | 
						|
         procedure addimplproc(intfindex: longint; procdef: pprocdef);
 | 
						|
         function  implproccount(intfindex: longint): longint;
 | 
						|
         function  implprocs(intfindex: longint; procindex: longint): pprocdef;
 | 
						|
         function  isimplmergepossible(intfindex, remainindex: longint; var weight: longint): boolean;
 | 
						|
 | 
						|
       private
 | 
						|
         finterfaces: tindexarray;
 | 
						|
         procedure checkindex(intfindex: longint);
 | 
						|
       end;
 | 
						|
 | 
						|
 | 
						|
       pclassrefdef = ^tclassrefdef;
 | 
						|
       tclassrefdef = object(tpointerdef)
 | 
						|
          constructor init(def : pdef);
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          function gettypename:string;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
       end;
 | 
						|
 | 
						|
       parraydef = ^tarraydef;
 | 
						|
       tarraydef = object(tdef)
 | 
						|
       private
 | 
						|
          rangenr    : longint;
 | 
						|
       public
 | 
						|
          lowrange,
 | 
						|
          highrange  : longint;
 | 
						|
          elementtype,
 | 
						|
          rangetype  : ttype;
 | 
						|
          IsDynamicArray,
 | 
						|
          IsVariant,
 | 
						|
          IsConstructor,
 | 
						|
          IsArrayOfConst : boolean;
 | 
						|
          function gettypename:string;virtual;
 | 
						|
          function elesize : longint;
 | 
						|
          constructor init(l,h : longint;rd : pdef);
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          procedure deref;virtual;
 | 
						|
          function size : longint;virtual;
 | 
						|
          function alignment : longint;virtual;
 | 
						|
          { generates the ranges needed by the asm instruction BOUND (i386)
 | 
						|
            or CMP2 (Motorola) }
 | 
						|
          procedure genrangecheck;
 | 
						|
 | 
						|
          { returns the label of the range check string }
 | 
						|
          function getrangecheckstring : string;
 | 
						|
          function needs_inittable : boolean;virtual;
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       precorddef = ^trecorddef;
 | 
						|
       trecorddef = object(tdef)
 | 
						|
          symtable : psymtable;
 | 
						|
          constructor init(p : psymtable);
 | 
						|
          constructor load;
 | 
						|
          destructor done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  size:longint;virtual;
 | 
						|
          function  alignment : longint;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { init/final }
 | 
						|
          procedure write_init_data;virtual;
 | 
						|
          procedure write_child_init_data;virtual;
 | 
						|
          function  needs_inittable : boolean;virtual;
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       porddef = ^torddef;
 | 
						|
       torddef = object(tdef)
 | 
						|
        private
 | 
						|
          rangenr  : longint;
 | 
						|
        public
 | 
						|
          low,high : longint;
 | 
						|
          typ      : tbasetype;
 | 
						|
          constructor init(t : tbasetype;v,b : longint);
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          procedure setsize;
 | 
						|
          { generates the ranges needed by the asm instruction BOUND }
 | 
						|
          { or CMP2 (Motorola)                                       }
 | 
						|
          procedure genrangecheck;
 | 
						|
          function  getrangecheckstring : string;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       pfloatdef = ^tfloatdef;
 | 
						|
       tfloatdef = object(tdef)
 | 
						|
          typ : tfloattype;
 | 
						|
          constructor init(t : tfloattype);
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          procedure setsize;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       pabstractprocdef = ^tabstractprocdef;
 | 
						|
       tabstractprocdef = object(tdef)
 | 
						|
          { saves a definition to the return type }
 | 
						|
          rettype         : ttype;
 | 
						|
          proctypeoption  : tproctypeoption;
 | 
						|
          proccalloptions : tproccalloptions;
 | 
						|
          procoptions     : tprocoptions;
 | 
						|
          para            : pparalinkedlist;
 | 
						|
          maxparacount,
 | 
						|
          minparacount    : longint;
 | 
						|
          symtablelevel   : byte;
 | 
						|
          fpu_used        : byte;    { how many stack fpu must be empty }
 | 
						|
          constructor init;
 | 
						|
          constructor load;
 | 
						|
          destructor done;virtual;
 | 
						|
          procedure  write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          procedure concatpara(tt:ttype;vsp : tvarspez;defval:psym);
 | 
						|
          function  para_size(alignsize:longint) : longint;
 | 
						|
          function  demangled_paras : string;
 | 
						|
          function  proccalloption2str : string;
 | 
						|
          procedure test_if_fpu_result;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
       end;
 | 
						|
 | 
						|
       pprocvardef = ^tprocvardef;
 | 
						|
       tprocvardef = object(tabstractprocdef)
 | 
						|
          constructor init;
 | 
						|
          constructor load;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  size : longint;virtual;
 | 
						|
          function gettypename:string;virtual;
 | 
						|
          function is_publishable : boolean;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput); virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { rtti }
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       tmessageinf = record
 | 
						|
         case integer of
 | 
						|
           0 : (str : pchar);
 | 
						|
           1 : (i : longint);
 | 
						|
       end;
 | 
						|
 | 
						|
       tprocdef = object(tabstractprocdef)
 | 
						|
       private
 | 
						|
          _mangledname : pstring;
 | 
						|
       public
 | 
						|
          extnumber  : longint;
 | 
						|
          messageinf : tmessageinf;
 | 
						|
          nextoverloaded : pprocdef;
 | 
						|
          { where is this function defined, needed here because there
 | 
						|
            is only one symbol for all overloaded functions }
 | 
						|
          fileinfo : tfileposinfo;
 | 
						|
          { pointer to the local symbol table }
 | 
						|
          localst : psymtable;
 | 
						|
          { pointer to the parameter symbol table }
 | 
						|
          parast : psymtable;
 | 
						|
          { symbol owning this definition }
 | 
						|
          procsym : pprocsym;
 | 
						|
          { browser info }
 | 
						|
          lastref,
 | 
						|
          defref,
 | 
						|
          crossref,
 | 
						|
          lastwritten : pref;
 | 
						|
          refcount : longint;
 | 
						|
          _class : pobjectdef;
 | 
						|
          { it's a tree, but this not easy to handle }
 | 
						|
          { used for inlined procs                   }
 | 
						|
          code : pointer;
 | 
						|
          { info about register variables (JM) }
 | 
						|
          regvarinfo: pointer;
 | 
						|
          { true, if the procedure is only declared }
 | 
						|
          { (forward procedure) }
 | 
						|
          forwarddef,
 | 
						|
          { true if the procedure is declared in the interface }
 | 
						|
          interfacedef : boolean;
 | 
						|
          { true if the procedure has a forward declaration }
 | 
						|
          hasforward : boolean;
 | 
						|
          { check the problems of manglednames }
 | 
						|
          count      : boolean;
 | 
						|
          is_used    : boolean;
 | 
						|
          { small set which contains the modified registers }
 | 
						|
{$ifdef newcg}
 | 
						|
          usedregisters : tregisterset;
 | 
						|
{$else newcg}
 | 
						|
          usedregisters : longint;
 | 
						|
{$endif newcg}
 | 
						|
          constructor init;
 | 
						|
          constructor load;
 | 
						|
          destructor  done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  haspara:boolean;
 | 
						|
          function  mangledname : string;
 | 
						|
          procedure setmangledname(const s : string);
 | 
						|
          procedure load_references;
 | 
						|
          function  write_references : boolean;
 | 
						|
{$ifdef dummy}
 | 
						|
          function  procname: string;
 | 
						|
{$endif dummy}
 | 
						|
          function  cplusplusmangledname : string;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { browser }
 | 
						|
{$ifdef BrowserLog}
 | 
						|
          procedure add_to_browserlog;
 | 
						|
{$endif BrowserLog}
 | 
						|
       end;
 | 
						|
 | 
						|
       pstringdef = ^tstringdef;
 | 
						|
       tstringdef = object(tdef)
 | 
						|
          string_typ : tstringtype;
 | 
						|
          len        : longint;
 | 
						|
          constructor shortinit(l : byte);
 | 
						|
          constructor shortload;
 | 
						|
          constructor longinit(l : longint);
 | 
						|
          constructor longload;
 | 
						|
          constructor ansiinit(l : longint);
 | 
						|
          constructor ansiload;
 | 
						|
          constructor wideinit(l : longint);
 | 
						|
          constructor wideload;
 | 
						|
          function  stringtypname:string;
 | 
						|
          function  size : longint;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { init/final }
 | 
						|
          function  needs_inittable : boolean;virtual;
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       penumdef = ^tenumdef;
 | 
						|
       tenumdef = object(tdef)
 | 
						|
          rangenr,
 | 
						|
          minval,
 | 
						|
          maxval    : longint;
 | 
						|
          has_jumps : boolean;
 | 
						|
          firstenum : penumsym;
 | 
						|
          basedef   : penumdef;
 | 
						|
          constructor init;
 | 
						|
          constructor init_subrange(_basedef:penumdef;_min,_max:longint);
 | 
						|
          constructor load;
 | 
						|
          destructor done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          procedure calcsavesize;
 | 
						|
          procedure setmax(_max:longint);
 | 
						|
          procedure setmin(_min:longint);
 | 
						|
          function  min:longint;
 | 
						|
          function  max:longint;
 | 
						|
          function  getrangecheckstring:string;
 | 
						|
          procedure genrangecheck;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function stabstring : pchar;virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { rtti }
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
       psetdef = ^tsetdef;
 | 
						|
       tsetdef = object(tdef)
 | 
						|
          elementtype : ttype;
 | 
						|
          settype : tsettype;
 | 
						|
          constructor init(s : pdef;high : longint);
 | 
						|
          constructor load;
 | 
						|
          destructor  done;virtual;
 | 
						|
          procedure write;virtual;
 | 
						|
          procedure deref;virtual;
 | 
						|
          function  gettypename:string;virtual;
 | 
						|
          function  is_publishable : boolean;virtual;
 | 
						|
          { debug }
 | 
						|
{$ifdef GDB}
 | 
						|
          function  stabstring : pchar;virtual;
 | 
						|
          procedure concatstabto(asmlist : paasmoutput);virtual;
 | 
						|
{$endif GDB}
 | 
						|
          { rtti }
 | 
						|
          procedure write_rtti_data;virtual;
 | 
						|
          procedure write_child_rtti_data;virtual;
 | 
						|
       end;
 | 
						|
 | 
						|
{
 | 
						|
  $Log$
 | 
						|
  Revision 1.15  2000-11-04 14:25:22  florian
 | 
						|
    + merged Attila's changes for interfaces, not tested yet
 | 
						|
 | 
						|
  Revision 1.14  2000/10/31 22:02:52  peter
 | 
						|
    * symtable splitted, no real code changes
 | 
						|
 | 
						|
  Revision 1.13  2000/10/21 18:16:12  florian
 | 
						|
    * a lot of changes:
 | 
						|
       - basic dyn. array support
 | 
						|
       - basic C++ support
 | 
						|
       - some work for interfaces done
 | 
						|
       ....
 | 
						|
 | 
						|
  Revision 1.12  2000/10/15 07:47:52  peter
 | 
						|
    * unit names and procedure names are stored mixed case
 | 
						|
 | 
						|
  Revision 1.11  2000/10/14 10:14:53  peter
 | 
						|
    * moehrendorf oct 2000 rewrite
 | 
						|
 | 
						|
  Revision 1.10  2000/09/24 15:06:29  peter
 | 
						|
    * use defines.inc
 | 
						|
 | 
						|
  Revision 1.9  2000/09/19 23:08:03  pierre
 | 
						|
   * fixes for local class debuggging problem (merged)
 | 
						|
 | 
						|
  Revision 1.8  2000/08/21 11:27:44  pierre
 | 
						|
   * fix the stabs problems
 | 
						|
 | 
						|
  Revision 1.7  2000/08/06 19:39:28  peter
 | 
						|
    * default parameters working !
 | 
						|
 | 
						|
  Revision 1.6  2000/08/06 14:17:15  peter
 | 
						|
    * overload fixes (merged)
 | 
						|
 | 
						|
  Revision 1.5  2000/08/03 13:17:26  jonas
 | 
						|
    + allow regvars to be used inside inlined procs, which required  the
 | 
						|
      following changes:
 | 
						|
        + load regvars in genentrycode/free them in genexitcode (cgai386)
 | 
						|
        * moved all regvar related code to new regvars unit
 | 
						|
        + added pregvarinfo type to hcodegen
 | 
						|
        + added regvarinfo field to tprocinfo (symdef/symdefh)
 | 
						|
        * deallocate the regvars of the caller in secondprocinline before
 | 
						|
          inlining the called procedure and reallocate them afterwards
 | 
						|
 | 
						|
  Revision 1.4  2000/08/02 19:49:59  peter
 | 
						|
    * first things for default parameters
 | 
						|
 | 
						|
  Revision 1.3  2000/07/13 12:08:27  michael
 | 
						|
  + patched to 1.1.0 with former 1.09patch from peter
 | 
						|
 | 
						|
  Revision 1.2  2000/07/13 11:32:49  michael
 | 
						|
  + removed logs
 | 
						|
 | 
						|
} |