Browse Source

* move class of definitions into type section for delphi

peter 24 năm trước cách đây
mục cha
commit
43dea5a35f
12 tập tin đã thay đổi với 202 bổ sung172 xóa
  1. 11 14
      compiler/nadd.pas
  2. 20 9
      compiler/nbas.pas
  3. 11 6
      compiler/ncal.pas
  4. 17 34
      compiler/ncnv.pas
  5. 27 18
      compiler/ncon.pas
  6. 30 14
      compiler/nflw.pas
  7. 9 32
      compiler/ninl.pas
  8. 17 10
      compiler/nld.pas
  9. 12 12
      compiler/nmat.pas
  10. 28 13
      compiler/nmem.pas
  11. 8 5
      compiler/nopt.pas
  12. 12 5
      compiler/nset.pas

+ 11 - 14
compiler/nadd.pas

@@ -39,13 +39,14 @@ interface
           { parts explicitely in the code generator (JM)    }
           function first_addstring: tnode; virtual;
        end;
+       taddnodeclass = class of taddnode;
 
     var
        { caddnode is used to create nodes of the add type }
        { the virtual constructor allows to assign         }
        { another class type to caddnode => processor      }
        { specific node types can be created               }
-       caddnode : class of taddnode;
+       caddnode : taddnodeclass;
 
 implementation
 
@@ -120,7 +121,6 @@ implementation
          hp:=self;
          if isbinaryoverloaded(hp) then
            begin
-              resulttypepass(hp);
               result:=hp;
               exit;
            end;
@@ -261,18 +261,19 @@ implementation
                 slashn :
                   begin
                     { int/int becomes a real }
-                    if int(rv)=0 then
+                    rvd:=rv;
+                    lvd:=lv;
+                    if int(rvd)=0 then
                      begin
                        Message(parser_e_invalid_float_operation);
                        t:=crealconstnode.create(0,pbestrealtype^);
                      end
                     else
-                     t:=crealconstnode.create(int(lv)/int(rv),pbestrealtype^);
+                     t:=crealconstnode.create(int(lvd)/int(rvd),pbestrealtype^);
                   end;
                 else
                   CGMessage(type_e_mismatch);
               end;
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -327,7 +328,6 @@ implementation
                  else
                    CGMessage(type_e_mismatch);
               end;
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -367,7 +367,6 @@ implementation
               end;
               donewidestring(ws1);
               donewidestring(ws2);
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -432,7 +431,6 @@ implementation
               end;
               ansistringdispose(s1,l1);
               ansistringdispose(s2,l2);
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -526,7 +524,6 @@ implementation
                    End;
               end;
               dispose(resultset);
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -585,7 +582,6 @@ implementation
                                (b and (ot=unequaln)) then
                              begin
                                hp:=cnotnode.create(hp);
-                               resulttypepass(hp);
                              end;
                             result:=hp;
                             exit;
@@ -602,7 +598,6 @@ implementation
                                (b and (ot=unequaln)) then
                              begin
                                hp:=cnotnode.create(hp);
-                               resulttypepass(hp);
                              end;
                             result:=hp;
                             exit;
@@ -623,7 +618,6 @@ implementation
                      begin
                        inserttypeconv(left,cshortstringtype);
                        hp := genaddsstringcharoptnode(self);
-                       resulttypepass(hp);
                        result := hp;
                        exit;
                      end;
@@ -811,7 +805,7 @@ implementation
                  if not(is_shortstring(rd) or is_char(rd)) then
                    inserttypeconv(right,cshortstringtype);
               end;
-              
+
           end
 
          { pointer comparision and subtraction }
@@ -1375,7 +1369,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.35  2001-08-31 15:42:15  jonas
+  Revision 1.36  2001-09-02 21:12:06  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.35  2001/08/31 15:42:15  jonas
     * added missing type conversion from small to normal sets
 
   Revision 1.34  2001/08/30 15:43:14  jonas

+ 20 - 9
compiler/nbas.pas

@@ -35,12 +35,14 @@ interface
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tnothingnodeclass = class of tnothingnode;
 
        terrornode = class(tnode)
           constructor create;virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       terrornodeclass = class of terrornode;
 
        tasmnode = class(tnode)
           p_asm : taasmoutput;
@@ -51,6 +53,7 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tasmnodeclass = class of tasmnode;
 
        tstatementnode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
@@ -60,12 +63,14 @@ interface
           procedure dowrite;override;
 {$endif extdebug}
        end;
+       tstatementnodeclass = class of tstatementnode;
 
        tblocknode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tblocknodeclass = class of tblocknode;
 
        { to allow access to the location by temp references even after the temp has }
        { already been disposed and to make sure the coherency between temps and     }
@@ -100,6 +105,7 @@ interface
          protected
           persistent: boolean;
         end;
+       ttempcreatenodeclass = class of ttempcreatenode;
 
         { a node which is a reference to a certain temp }
         ttemprefnode = class(tnode)
@@ -111,6 +117,7 @@ interface
          protected
           tempinfo: ptempinfo;
         end;
+       ttemprefnodeclass = class of ttemprefnode;
 
         { a node which removes a temp }
         ttempdeletenode = class(tnode)
@@ -123,16 +130,17 @@ interface
          protected
           tempinfo: ptempinfo;
         end;
+       ttempdeletenodeclass = class of ttempdeletenode;
 
     var
-       cnothingnode : class of tnothingnode;
-       cerrornode : class of terrornode;
-       casmnode : class of tasmnode;
-       cstatementnode : class of tstatementnode;
-       cblocknode : class of tblocknode;
-       ctempcreatenode : class of ttempcreatenode;
-       ctemprefnode : class of ttemprefnode;
-       ctempdeletenode : class of ttempdeletenode;
+       cnothingnode : tnothingnodeclass;
+       cerrornode : terrornodeclass;
+       casmnode : tasmnodeclass;
+       cstatementnode : tstatementnodeclass;
+       cblocknode : tblocknodeclass;
+       ctempcreatenode : ttempcreatenodeclass;
+       ctemprefnode : ttemprefnodeclass;
+       ctempdeletenode : ttempdeletenodeclass;
 
 implementation
 
@@ -617,7 +625,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.16  2001-08-26 13:36:38  florian
+  Revision 1.17  2001-09-02 21:12:06  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.16  2001/08/26 13:36:38  florian
     * some cg reorganisation
     * some PPC updates
 

+ 11 - 6
compiler/ncal.pas

@@ -47,7 +47,7 @@ interface
           { the RTL) (JM)                                                }
           restype: ttype;
           restypeset: boolean;
-          
+
           { only the processor specific nodes need to override this }
           { constructor                                             }
           constructor create(l:tnode; v : tprocsym;st : tsymtable; mp : tnode);virtual;
@@ -61,6 +61,7 @@ interface
           function  docompare(p: tnode): boolean; override;
           procedure set_procvar(procvar:tnode);
        end;
+       tcallnodeclass = class of tcallnode;
 
        tcallparaflags = (
           { flags used by tcallparanode }
@@ -89,6 +90,7 @@ interface
                    para_alignment,para_offset : longint);virtual;abstract;
           function docompare(p: tnode): boolean; override;
        end;
+       tcallparanodeclass = class of tcallparanode;
 
        tprocinlinenode = class(tnode)
           inlinetree : tnode;
@@ -101,14 +103,15 @@ interface
           function pass_1 : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tprocinlinenodeclass = class of tprocinlinenode;
 
     function reverseparameters(p: tcallparanode): tcallparanode;
 
 
     var
-       ccallnode : class of tcallnode;
-       ccallparanode : class of tcallparanode;
-       cprocinlinenode : class of tprocinlinenode;
+       ccallnode : tcallnodeclass;
+       ccallparanode : tcallparanodeclass;
+       cprocinlinenode : tprocinlinenodeclass;
 
 implementation
 
@@ -1357,7 +1360,6 @@ implementation
               end
              else
               hpt:=geninlinenode(tprocdef(procdefinition).extnumber,is_const,nil);
-             resulttypepass(hpt);
              result:=hpt;
              goto errorexit;
            end;
@@ -1744,7 +1746,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.48  2001-08-30 15:39:59  jonas
+  Revision 1.49  2001-09-02 21:12:06  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.48  2001/08/30 15:39:59  jonas
     * fixed docompare for the fields I added to tcallnode in my previous
       commit
     * removed nested comment warning

+ 17 - 34
compiler/ncnv.pas

@@ -77,23 +77,26 @@ interface
           function first_char_to_char : tnode;virtual;
           function first_call_helper(c : tconverttype) : tnode;
        end;
+       ttypeconvnodeclass = class of ttypeconvnode;
 
        tasnode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tasnodeclass = class of tasnode;
 
        tisnode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tisnodeclass = class of tisnode;
 
     var
-       ctypeconvnode : class of ttypeconvnode;
-       casnode : class of tasnode;
-       cisnode : class of tisnode;
+       ctypeconvnode : ttypeconvnodeclass;
+       casnode : tasnodeclass;
+       cisnode : tisnodeclass;
 
     procedure inserttypeconv(var p:tnode;const t:ttype);
     procedure arrayconstructor_to_set(var p : tarrayconstructornode);
@@ -398,14 +401,14 @@ implementation
         if left.nodetype=ordconstn then
           begin
             { check if we have a valid pointer constant (JM) }
-            if (sizeof(tordconstnode) > sizeof(tpointerord)) then
-              if (sizeof(tpointerord) = 4) then
+            if (sizeof(pointer) > sizeof(TConstPtrUInt)) then
+              if (sizeof(TConstPtrUInt) = 4) then
                 begin
                   if (tordconstnode(left).value < low(longint)) or
                      (tordconstnode(left).value > high(cardinal)) then
                   CGMessage(parser_e_range_check_error);
                 end
-              else if (sizeof(tpointerord) = 8) then
+              else if (sizeof(TConstPtrUInt) = 8) then
                 begin
                   if (tordconstnode(left).value < low(int64)) or
                      (tordconstnode(left).value > high(qword)) then
@@ -413,8 +416,7 @@ implementation
                 end
               else
                 internalerror(2001020801);
-            t:=cpointerconstnode.create(tpointerord(tordconstnode(left).value),resulttype);
-            resulttypepass(t);
+            t:=cpointerconstnode.create(TConstPtrUInt(tordconstnode(left).value),resulttype);
             result:=t;
           end
          else
@@ -427,9 +429,8 @@ implementation
           'fpc_chararray_to_'+lower(tstringdef(resulttype.def).stringtypname),
           ccallparanode.create(left,nil),resulttype);
         left := nil;
-        resulttypepass(result);
       end;
-    
+
     function ttypeconvnode.resulttype_string_to_chararray : tnode;
       var
         arrsize: longint;
@@ -454,9 +455,8 @@ implementation
           '_to_chararray',ccallparanode.create(left,ccallparanode.create(
           cordconstnode.create(arrsize,s32bittype),nil)),resulttype);
         left := nil;
-        resulttypepass(result);
       end;
-    
+
     function ttypeconvnode.resulttype_string_to_string : tnode;
       var
         procname: string[31];
@@ -509,10 +509,9 @@ implementation
                   st_shortstring) then
                stringpara.right := ccallparanode.create(cinlinenode.create(
                  in_high_x,false,self.getcopy),nil);
-                 
+
              { and create the callnode }
              result := ccallnode.createinternres(procname,stringpara,resulttype);
-             resulttypepass(result);
            end;
       end;
 
@@ -536,7 +535,6 @@ implementation
                end
               else
                hp:=cstringconstnode.createstr(chr(tordconstnode(left).value),tstringdef(resulttype.def).string_typ);
-              resulttypepass(hp);
               result:=hp;
            end
          else
@@ -553,7 +551,6 @@ implementation
 
                { and finally the call }
                result := ccallnode.createinternres(procname,para,resulttype);
-               resulttypepass(result);
              end;
       end;
 
@@ -570,7 +567,6 @@ implementation
               begin
                 hp:=cordconstnode.create(
                       ord(unicode2asciichar(tcompilerwidechar(tordconstnode(left).value))),cchartype);
-                resulttypepass(hp);
                 result:=hp;
               end
              else if (torddef(resulttype.def).typ=uwidechar) and
@@ -578,7 +574,6 @@ implementation
               begin
                 hp:=cordconstnode.create(
                       asciichar2unicode(chr(tordconstnode(left).value)),cwidechartype);
-                resulttypepass(hp);
                 result:=hp;
               end
              else
@@ -596,7 +591,6 @@ implementation
         if left.nodetype=ordconstn then
          begin
            t:=crealconstnode.create(tordconstnode(left).value,resulttype);
-           resulttypepass(t);
            result:=t;
            exit;
          end;
@@ -611,7 +605,6 @@ implementation
          if left.nodetype=realconstn then
            begin
              t:=crealconstnode.create(trealconstnode(left).value_real,resulttype);
-             resulttypepass(t);
              result:=t;
            end;
       end;
@@ -651,8 +644,6 @@ implementation
         left:=nil;
       { create a set constructor tree }
         arrayconstructor_to_set(tarrayconstructornode(hp));
-      { now resulttypepass the set }
-        resulttypepass(hp);
         result:=hp;
       end;
 
@@ -663,7 +654,6 @@ implementation
           'fpc_pchar_to_'+lower(tstringdef(resulttype.def).stringtypname),
           ccallparanode.create(left,nil),resulttype);
         left := nil;
-        resulttypepass(result);
       end;
 
 
@@ -765,7 +755,6 @@ implementation
              { tell explicitly which def we must use !! (PM) }
              tcallnode(hp).procdefinition:=aprocdef;
              left:=nil;
-             resulttypepass(hp);
              result:=hp;
              exit;
           end;
@@ -843,7 +832,6 @@ implementation
                  if left.nodetype=ordconstn then
                   begin
                     hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                    resulttypepass(hp);
                     result:=hp;
                     exit;
                   end
@@ -862,7 +850,6 @@ implementation
                   if left.nodetype=ordconstn then
                    begin
                      hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                     resulttypepass(hp);
                      result:=hp;
                      exit;
                    end
@@ -877,7 +864,6 @@ implementation
                else if (left.nodetype=niln) and is_ordinal(resulttype.def) then
                   begin
                      hp:=cordconstnode.create(0,resulttype);
-                     resulttypepass(hp);
                      result:=hp;
                      exit;
                   end
@@ -887,7 +873,6 @@ implementation
                 (left.nodetype=pointerconstn) then
                 begin
                    hp:=cordconstnode.create(tpointerconstnode(left).value,resulttype);
-                   resulttypepass(hp);
                    result:=hp;
                    exit;
                 end
@@ -900,7 +885,6 @@ implementation
                    if left.nodetype=ordconstn then
                     begin
                       hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                      resulttypepass(hp);
                       result:=hp;
                       exit;
                     end
@@ -919,7 +903,6 @@ implementation
                    if left.nodetype=ordconstn then
                     begin
                       hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                      resulttypepass(hp);
                       result:=hp;
                       exit;
                     end
@@ -938,7 +921,6 @@ implementation
                    if left.nodetype=ordconstn then
                     begin
                       hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                      resulttypepass(hp);
                       result:=hp;
                       exit;
                     end
@@ -956,7 +938,6 @@ implementation
                    if left.nodetype=ordconstn then
                     begin
                       hp:=cordconstnode.create(tordconstnode(left).value,resulttype);
-                      resulttypepass(hp);
                       result:=hp;
                       exit;
                     end
@@ -1039,7 +1020,6 @@ implementation
           begin
              hp:=cnilnode.create;
              hp.resulttype:=resulttype;
-             resulttypepass(hp);
              result:=hp;
              exit;
           end;
@@ -1486,7 +1466,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.35  2001-08-29 19:49:03  jonas
+  Revision 1.36  2001-09-02 21:12:06  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.35  2001/08/29 19:49:03  jonas
     * some fixes in compilerprocs for chararray to string conversions
     * conversion from string to chararray is now also done via compilerprocs
 

+ 27 - 18
compiler/ncon.pas

@@ -43,6 +43,7 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode) : boolean; override;
        end;
+       trealconstnodeclass = class of trealconstnode;
 
        tordconstnode = class(tnode)
           restype : ttype;
@@ -53,16 +54,18 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode) : boolean; override;
        end;
+       tordconstnodeclass = class of tordconstnode;
 
        tpointerconstnode = class(tnode)
           restype : ttype;
-          value : TPointerOrd;
-          constructor create(v : tpointerord;const t:ttype);virtual;
+          value   : TConstPtrUInt;
+          constructor create(v : TConstPtrUInt;const t:ttype);virtual;
           function getcopy : tnode;override;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
           function docompare(p: tnode) : boolean; override;
        end;
+       tpointerconstnodeclass = class of tpointerconstnode;
 
        tstringconstnode = class(tnode)
           value_str : pchar;
@@ -79,6 +82,7 @@ interface
           function getpcharcopy : pchar;
           function docompare(p: tnode) : boolean; override;
        end;
+       tstringconstnodeclass = class of tstringconstnode;
 
        tsetconstnode = class(tunarynode)
           restype : ttype;
@@ -91,20 +95,22 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode) : boolean; override;
        end;
+       tsetconstnodeclass = class of tsetconstnode;
 
        tnilnode = class(tnode)
           constructor create;virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tnilnodeclass = class of tnilnode;
 
     var
-       crealconstnode : class of trealconstnode;
-       cordconstnode : class of tordconstnode;
-       cpointerconstnode : class of tpointerconstnode;
-       cstringconstnode : class of tstringconstnode;
-       csetconstnode : class of tsetconstnode;
-       cnilnode : class of tnilnode;
+       crealconstnode : trealconstnodeclass;
+       cordconstnode : tordconstnodeclass;
+       cpointerconstnode : tpointerconstnodeclass;
+       cstringconstnode : tstringconstnodeclass;
+       csetconstnode : tsetconstnodeclass;
+       cnilnode : tnilnodeclass;
 
     function genintconstnode(v : TConstExprInt) : tordconstnode;
     function genenumnode(v : tenumsym) : tordconstnode;
@@ -255,29 +261,29 @@ implementation
         p1:=nil;
         case p.consttyp of
           constint :
-            p1:=genintconstnode(p.value);
+            p1:=genintconstnode(p.valueord);
           conststring :
             begin
               len:=p.len;
               if not(cs_ansistrings in aktlocalswitches) and (len>255) then
                len:=255;
               getmem(pc,len+1);
-              move(pchar(tpointerord(p.value))^,pc^,len);
+              move(pchar(p.valueptr)^,pc^,len);
               pc[len]:=#0;
               p1:=cstringconstnode.createpchar(pc,len);
             end;
           constchar :
-            p1:=cordconstnode.create(p.value,cchartype);
+            p1:=cordconstnode.create(p.valueord,cchartype);
           constreal :
-            p1:=crealconstnode.create(pbestreal(tpointerord(p.value))^,pbestrealtype^);
+            p1:=crealconstnode.create(pbestreal(p.valueptr)^,pbestrealtype^);
           constbool :
-            p1:=cordconstnode.create(p.value,booltype);
+            p1:=cordconstnode.create(p.valueord,booltype);
           constset :
-            p1:=csetconstnode.create(pconstset(tpointerord(p.value)),p.consttype);
+            p1:=csetconstnode.create(pconstset(p.valueptr),p.consttype);
           constord :
-            p1:=cordconstnode.create(p.value,p.consttype);
+            p1:=cordconstnode.create(p.valueord,p.consttype);
           constpointer :
-            p1:=cpointerconstnode.create(p.value,p.consttype);
+            p1:=cpointerconstnode.create(p.valueordptr,p.consttype);
           constnil :
             p1:=cnilnode.create;
           constresourcestring:
@@ -383,7 +389,7 @@ implementation
                             TPOINTERCONSTNODE
 *****************************************************************************}
 
-    constructor tpointerconstnode.create(v : tpointerord;const t:ttype);
+    constructor tpointerconstnode.create(v : TConstPtrUInt;const t:ttype);
 
       begin
          inherited create(pointerconstn);
@@ -656,7 +662,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.21  2001-08-26 13:36:40  florian
+  Revision 1.22  2001-09-02 21:12:06  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.21  2001/08/26 13:36:40  florian
     * some cg reorganisation
     * some PPC updates
 

+ 30 - 14
compiler/nflw.pas

@@ -48,36 +48,42 @@ interface
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       twhilerepeatnodeclass = class of twhilerepeatnode;
 
        tifnode = class(tloopnode)
           constructor create(l,r,_t1 : tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tifnodeclass = class of tifnode;
 
        tfornode = class(tloopnode)
           constructor create(l,r,_t1,_t2 : tnode;back : boolean);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tfornodeclass = class of tfornode;
 
        texitnode = class(tunarynode)
           constructor create(l:tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       texitnodeclass = class of texitnode;
 
        tbreaknode = class(tnode)
           constructor create;virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tbreaknodeclass = class of tbreaknode;
 
        tcontinuenode = class(tnode)
           constructor create;virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tcontinuenodeclass = class of tcontinuenode;
 
        tgotonode = class(tnode)
           labelnr : tasmlabel;
@@ -89,6 +95,7 @@ interface
           function pass_1 : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tgotonodeclass = class of tgotonode;
 
        tlabelnode = class(tunarynode)
           labelnr : tasmlabel;
@@ -101,6 +108,7 @@ interface
           function pass_1 : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tlabelnodeclass = class of tlabelnode;
 
        traisenode = class(tbinarynode)
           frametree : tnode;
@@ -111,18 +119,21 @@ interface
           function pass_1 : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       traisenodeclass = class of traisenode;
 
        ttryexceptnode = class(tloopnode)
           constructor create(l,r,_t1 : tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       ttryexceptnodeclass = class of ttryexceptnode;
 
        ttryfinallynode = class(tbinarynode)
           constructor create(l,r:tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       ttryfinallynodeclass = class of ttryfinallynode;
 
        tonnode = class(tbinarynode)
           exceptsymtable : tsymtable;
@@ -134,6 +145,7 @@ interface
           function getcopy : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tonnodeclass = class of tonnode;
 
        tfailnode = class(tnode)
           constructor create;virtual;
@@ -141,24 +153,25 @@ interface
           function pass_1: tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tfailnodeclass = class of tfailnode;
 
     { for compatibilty }
     function genloopnode(t : tnodetype;l,r,n1 : tnode;back : boolean) : tnode;
 
     var
-       cwhilerepeatnode : class of twhilerepeatnode;
-       cifnode : class of tifnode;
-       cfornode : class of tfornode;
-       cexitnode : class of texitnode;
-       cbreaknode : class of tbreaknode;
-       ccontinuenode : class of tcontinuenode;
-       cgotonode : class of tgotonode;
-       clabelnode : class of tlabelnode;
-       craisenode : class of traisenode;
-       ctryexceptnode : class of ttryexceptnode;
-       ctryfinallynode : class of ttryfinallynode;
-       connode : class of tonnode;
-       cfailnode : class of tfailnode;
+       cwhilerepeatnode : twhilerepeatnodeclass;
+       cifnode : tifnodeclass;
+       cfornode : tfornodeclass;
+       cexitnode : texitnodeclass;
+       cbreaknode : tbreaknodeclass;
+       ccontinuenode : tcontinuenodeclass;
+       cgotonode : tgotonodeclass;
+       clabelnode : tlabelnodeclass;
+       craisenode : traisenodeclass;
+       ctryexceptnode : ttryexceptnodeclass;
+       ctryfinallynode : ttryfinallynodeclass;
+       connode : tonnodeclass;
+       cfailnode : tfailnodeclass;
 
 implementation
 
@@ -1167,7 +1180,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.23  2001-08-30 20:56:38  peter
+  Revision 1.24  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.23  2001/08/30 20:56:38  peter
     * exit() with exceptions fix
 
   Revision 1.22  2001/08/26 13:36:40  florian

+ 9 - 32
compiler/ninl.pas

@@ -45,9 +45,10 @@ interface
           function handle_read_write: tnode;
           function handle_val: tnode;
        end;
+       tinlinenodeclass = class of tinlinenode;
 
     var
-       cinlinenode : class of tinlinenode;
+       cinlinenode : tinlinenodeclass;
 
    function geninlinenode(number : byte;is_const:boolean;l : tnode) : tinlinenode;
 
@@ -380,7 +381,7 @@ implementation
                 { temprefs will be part of the filepara, of which we need  }
                 { the resulttype later on and temprefs can only be         }
                 { resulttypepassed if the resulttype of the temp is known) }
-                resulttypepass(filetemp);
+                resulttypepass(tnode(filetemp));
 
                 { assign the address of the file to the temp }
                 newstatement.left := cstatementnode.create(nil,
@@ -781,7 +782,6 @@ implementation
               { otherwise return the newly generated block of instructions, }
               { but first free the errornode we generated at the beginning }
               result.free;
-              resulttypepass(newblock);
               result := newblock
             end;
       end;
@@ -859,7 +859,7 @@ implementation
             newstatement := tstatementnode(newstatement.left);
             { set the resulttype of the temp (needed to be able to get }
             { the resulttype of the tempref used in the new code para) }
-            resulttypepass(tempcode);
+            resulttypepass(tnode(tempcode));
             { create a temp codepara, but save the original code para to }
             { assign the result to later on                              }
             if assigned(codepara) then
@@ -959,8 +959,6 @@ implementation
 
         { free the errornode }
         result.free;
-        { resulttypepass our new code }
-        resulttypepass(newblock);
         { and return it }
         result := newblock;
       end;
@@ -1041,12 +1039,8 @@ implementation
         end;
 
         procedure setconstrealvalue(r : bestreal);
-        var
-           hp : tnode;
         begin
-           hp:=crealconstnode.create(r,pbestrealtype^);
-           resulttypepass(hp);
-           result:=hp;
+           result:=crealconstnode.create(r,pbestrealtype^);
         end;
 
       var
@@ -1268,7 +1262,6 @@ implementation
              end;
             if hp=nil then
              hp:=tnode.create(errorn);
-            resulttypepass(hp);
             result:=hp;
             goto myexit;
           end
@@ -1304,7 +1297,6 @@ implementation
                        in_hi_qword :
                          hp:=cordconstnode.create(tordconstnode(left).value shr 32,left.resulttype);
                      end;
-                     resulttypepass(hp);
                      result:=hp;
                      goto myexit;
                    end;
@@ -1342,7 +1334,6 @@ implementation
                    if (left.nodetype=ordconstn) then
                     begin
                       hp:=cordconstnode.create(tordconstnode(left).value,s32bittype);
-                      resulttypepass(hp);
                       result:=hp;
                       goto myexit;
                     end;
@@ -1358,7 +1349,6 @@ implementation
                                hp:=ctypeconvnode.create(left,u8bittype);
                                left:=nil;
                                include(hp.flags,nf_explizit);
-                               resulttypepass(hp);
                                result:=hp;
                              end;
                            bool16bit,
@@ -1368,7 +1358,6 @@ implementation
                                hp:=ctypeconvnode.create(left,u16bittype);
                                left:=nil;
                                include(hp.flags,nf_explizit);
-                               resulttypepass(hp);
                                result:=hp;
                              end;
                            bool32bit :
@@ -1377,7 +1366,6 @@ implementation
                                hp:=ctypeconvnode.create(left,u32bittype);
                                left:=nil;
                                include(hp.flags,nf_explizit);
-                               resulttypepass(hp);
                                result:=hp;
                              end;
                            uvoid :
@@ -1396,7 +1384,6 @@ implementation
                          hp:=ctypeconvnode.create(left,s32bittype);
                          left:=nil;
                          include(hp.flags,nf_explizit);
-                         resulttypepass(hp);
                          result:=hp;
                        end;
                      else
@@ -1411,7 +1398,6 @@ implementation
                    hp:=ctypeconvnode.create(left,cchartype);
                    include(hp.flags,nf_explizit);
                    left:=nil;
-                   resulttypepass(hp);
                    result:=hp;
                 end;
 
@@ -1436,7 +1422,6 @@ implementation
                         if (left.nodetype=stringconstn) then
                          begin
                            hp:=cordconstnode.create(tstringconstnode(left).len,s32bittype);
-                           resulttypepass(hp);
                            result:=hp;
                            goto myexit;
                          end;
@@ -1448,7 +1433,6 @@ implementation
                            is_widechar(left.resulttype.def) then
                          begin
                            hp:=cordconstnode.create(1,s32bittype);
-                           resulttypepass(hp);
                            result:=hp;
                            goto myexit;
                          end
@@ -1463,7 +1447,6 @@ implementation
                            srsym:=searchsymonlyin(tloadnode(left).symtable,'high'+tvarsym(tloadnode(left).symtableentry).name);
                            hp:=caddnode.create(addn,cloadnode.create(tvarsym(srsym),tloadnode(left).symtable),
                                                     cordconstnode.create(1,s32bittype));
-                           resulttypepass(hp);
                            result:=hp;
                            goto myexit;
                          end
@@ -1473,7 +1456,6 @@ implementation
                             hp:=cordconstnode.create(tarraydef(left.resulttype.def).highrange-
                                                       tarraydef(left.resulttype.def).lowrange+1,
                                                      s32bittype);
-                            resulttypepass(hp);
                             result:=hp;
                             goto myexit;
                           end;
@@ -1509,7 +1491,6 @@ implementation
                 begin
                   set_varstate(left,false);
                   hp:=cordconstnode.create(0,s32bittype);
-                  resulttypepass(hp);
                   result:=hp;
                   goto myexit;
                 end;
@@ -1535,7 +1516,6 @@ implementation
                        hp:=cordconstnode.create(tordconstnode(left).value+1,left.resulttype)
                       else
                        hp:=cordconstnode.create(tordconstnode(left).value-1,left.resulttype);
-                      resulttypepass(hp);
                       result:=hp;
                     end;
                 end;
@@ -1650,7 +1630,6 @@ implementation
                   hp:=ccallparanode.create(cordconstnode.create(tcallparanode(left).left.resulttype.def.size,s32bittype),left);
                   hp:=ccallnode.create(hp,tprocsym(srsym),systemunit,nil);
                   left:=nil;
-                  resulttypepass(hp);
                   result:=hp;
                 end;
 
@@ -1714,13 +1693,11 @@ implementation
                     enumdef:
                       begin
                         hp:=do_lowhigh(left.resulttype);
-                        resulttypepass(hp);
                         result:=hp;
                       end;
                     setdef:
                       begin
                         hp:=do_lowhigh(tsetdef(left.resulttype.def).elementtype);
-                        resulttypepass(hp);
                         result:=hp;
                       end;
                     arraydef:
@@ -1728,7 +1705,6 @@ implementation
                         if inlinenumber=in_low_x then
                          begin
                            hp:=cordconstnode.create(tarraydef(left.resulttype.def).lowrange,tarraydef(left.resulttype.def).rangetype);
-                           resulttypepass(hp);
                            result:=hp;
                          end
                         else
@@ -1738,7 +1714,6 @@ implementation
                             begin
                               srsym:=searchsymonlyin(tloadnode(left).symtable,'high'+tvarsym(tloadnode(left).symtableentry).name);
                               hp:=cloadnode.create(tvarsym(srsym),tloadnode(left).symtable);
-                              resulttypepass(hp);
                               result:=hp;
                             end
                            else
@@ -1753,7 +1728,6 @@ implementation
                                 { make sure the left node doesn't get disposed, since it's }
                                 { reused in the new node (JM)                              }
                                 left:=nil;
-                                resulttypepass(hp);
                                 result:=hp;
                               end
                            else
@@ -2303,7 +2277,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.54  2001-08-28 13:24:46  jonas
+  Revision 1.55  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.54  2001/08/28 13:24:46  jonas
     + compilerproc implementation of most string-related type conversions
     - removed all code from the compiler which has been replaced by
       compilerproc implementations (using {$ifdef hascompilerproc} is not

+ 17 - 10
compiler/nld.pas

@@ -41,6 +41,7 @@ interface
           function  det_resulttype:tnode;override;
           function  docompare(p: tnode): boolean; override;
        end;
+       tloadnodeclass = class of tloadnode;
 
        { different assignment types }
        tassigntype = (at_normal,at_plus,at_minus,at_star,at_slash);
@@ -53,6 +54,7 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tassignmentnodeclass = class of tassignmentnode;
 
        tfuncretnode = class(tnode)
           funcretsym : tfuncretsym;
@@ -62,12 +64,14 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tfuncretnodeclass = class of tfuncretnode;
 
        tarrayconstructorrangenode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tarrayconstructorrangenodeclass = class of tarrayconstructorrangenode;
 
        tarrayconstructornode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
@@ -77,6 +81,7 @@ interface
           function docompare(p: tnode): boolean; override;
           procedure force_type(tt:ttype);
        end;
+       tarrayconstructornodeclass = class of tarrayconstructornode;
 
        ttypenode = class(tnode)
           allowed : boolean;
@@ -86,14 +91,15 @@ interface
           function det_resulttype:tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       ttypenodeclass = class of ttypenode;
 
     var
-       cloadnode : class of tloadnode;
-       cassignmentnode : class of tassignmentnode;
-       cfuncretnode : class of tfuncretnode;
-       carrayconstructorrangenode : class of tarrayconstructorrangenode;
-       carrayconstructornode : class of tarrayconstructornode;
-       ctypenode : class of ttypenode;
+       cloadnode : tloadnodeclass;
+       cassignmentnode : tassignmentnodeclass;
+       cfuncretnode : tfuncretnodeclass;
+       carrayconstructorrangenode : tarrayconstructorrangenodeclass;
+       carrayconstructornode : tarrayconstructornodeclass;
+       ctypenode : ttypenodeclass;
 
 
 implementation
@@ -153,7 +159,6 @@ implementation
               p1:=tnode(twithsymtable(symtable).withrefnode).getcopy;
               p1:=csubscriptnode.create(tvarsym(symtableentry),p1);
               left:=nil;
-              resulttypepass(p1);
               result:=p1;
               exit;
            end;
@@ -184,7 +189,7 @@ implementation
                       ((tfuncretsym(symtableentry)=p^.procdef.resultfuncretsym) or
                        (tfuncretsym(symtableentry)=p^.procdef.funcretsym)) then
                      begin
-                       symtableentry:=p^.procdef.funcretsym; 
+                       symtableentry:=p^.procdef.funcretsym;
                        break;
                      end;
                     p:=p^.parent;
@@ -592,7 +597,6 @@ implementation
          begin
            hp:=tarrayconstructornode(getcopy);
            arrayconstructor_to_set(hp);
-           resulttypepass(hp);
            result:=hp;
            exit;
          end;
@@ -796,7 +800,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.24  2001-08-30 15:48:34  jonas
+  Revision 1.25  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.24  2001/08/30 15:48:34  jonas
     * fix from Peter for getting correct symtableentry for funcret loads
 
   Revision 1.23  2001/08/26 13:36:41  florian

+ 12 - 12
compiler/nmat.pas

@@ -34,29 +34,33 @@ interface
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tmoddivnodeclass = class of tmoddivnode;
 
        tshlshrnode = class(tbinopnode)
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tshlshrnodeclass = class of tshlshrnode;
 
        tunaryminusnode = class(tunarynode)
           constructor create(expr : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tunaryminusnodeclass = class of tunaryminusnode;
 
        tnotnode = class(tunarynode)
           constructor create(expr : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tnotnodeclass = class of tnotnode;
 
     var
-       cmoddivnode : class of tmoddivnode;
-       cshlshrnode : class of tshlshrnode;
-       cunaryminusnode : class of tunaryminusnode;
-       cnotnode : class of tnotnode;
+       cmoddivnode : tmoddivnodeclass;
+       cshlshrnode : tshlshrnodeclass;
+       cunaryminusnode : tunaryminusnodeclass;
+       cnotnode : tnotnodeclass;
 
 
 implementation
@@ -110,7 +114,6 @@ implementation
                 divn:
                   t:=genintconstnode(lv div rv);
               end;
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -119,7 +122,6 @@ implementation
          t:=self;
          if isbinaryoverloaded(t) then
            begin
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -236,7 +238,6 @@ implementation
                  shln:
                    t:=genintconstnode(tordconstnode(left).value shl tordconstnode(right).value);
               end;
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -245,7 +246,6 @@ implementation
          t:=self;
          if isbinaryoverloaded(t) then
            begin
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -362,7 +362,6 @@ implementation
                         t:=ccallnode.create(ccallparanode.create(left,nil),
                                             overloaded_operators[_minus],nil,nil);
                         left:=nil;
-                        resulttypepass(t);
                         result:=t;
                         exit;
                      end;
@@ -478,7 +477,6 @@ implementation
                   CGMessage(type_e_mismatch);
               end;
               t:=cordconstnode.create(v,left.resulttype);
-              resulttypepass(t);
               result:=t;
               exit;
            end;
@@ -515,7 +513,6 @@ implementation
                         t:=ccallnode.create(ccallparanode.create(left,nil),
                                             overloaded_operators[_op_not],nil,nil);
                         left:=nil;
-                        resulttypepass(t);
                         result:=t;
                         exit;
                      end;
@@ -590,7 +587,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.21  2001-08-26 13:36:41  florian
+  Revision 1.22  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.21  2001/08/26 13:36:41  florian
     * some cg reorganisation
     * some PPC updates
 

+ 28 - 13
compiler/nmem.pas

@@ -37,48 +37,56 @@ interface
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tloadvmtnodeclass = class of tloadvmtnode;
 
        thnewnode = class(tnode)
           constructor create;virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       thnewnodeclass = class of thnewnode;
 
        tnewnode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tnewnodeclass = class of tnewnode;
 
        thdisposenode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       thdisposenodeclass = class of thdisposenode;
 
        tsimplenewdisposenode = class(tunarynode)
           constructor create(n : tnodetype;l : tnode);
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tsimplenewdisposenodeclass = class of tsimplenewdisposenode;
 
        taddrnode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       taddrnodeclass = class of taddrnode;
 
        tdoubleaddrnode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tdoubleaddrnodeclass = class of tdoubleaddrnode;
 
        tderefnode = class(tunarynode)
           constructor create(l : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tderefnodeclass = class of tderefnode;
 
        tsubscriptnode = class(tunarynode)
           vs : tvarsym;
@@ -88,12 +96,14 @@ interface
           function docompare(p: tnode): boolean; override;
           function det_resulttype:tnode;override;
        end;
+       tsubscriptnodeclass = class of tsubscriptnode;
 
        tvecnode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tvecnodeclass = class of tvecnode;
 
        tselfnode = class(tnode)
           classdef : tobjectdef;
@@ -101,6 +111,7 @@ interface
           function pass_1 : tnode;override;
           function det_resulttype:tnode;override;
        end;
+       tselfnodeclass = class of tselfnode;
 
        twithnode = class(tbinarynode)
           withsymtable : twithsymtable;
@@ -113,20 +124,21 @@ interface
           function docompare(p: tnode): boolean; override;
           function det_resulttype:tnode;override;
        end;
+       twithnodeclass = class of twithnode;
 
     var
-       cloadvmtnode : class of tloadvmtnode;
-       chnewnode : class of thnewnode;
-       cnewnode : class of tnewnode;
-       chdisposenode : class of thdisposenode;
-       csimplenewdisposenode : class of tsimplenewdisposenode;
-       caddrnode : class of taddrnode;
-       cdoubleaddrnode : class of tdoubleaddrnode;
-       cderefnode : class of tderefnode;
-       csubscriptnode : class of tsubscriptnode;
-       cvecnode : class of tvecnode;
-       cselfnode : class of tselfnode;
-       cwithnode : class of twithnode;
+       cloadvmtnode : tloadvmtnodeclass;
+       chnewnode : thnewnodeclass;
+       cnewnode : tnewnodeclass;
+       chdisposenode : thdisposenodeclass;
+       csimplenewdisposenode : tsimplenewdisposenodeclass;
+       caddrnode : taddrnodeclass;
+       cdoubleaddrnode : tdoubleaddrnodeclass;
+       cderefnode : tderefnodeclass;
+       csubscriptnode : tsubscriptnodeclass;
+       cvecnode : tvecnodeclass;
+       cselfnode : tselfnodeclass;
+       cwithnode : twithnodeclass;
 
 implementation
 
@@ -970,7 +982,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.19  2001-08-26 13:36:42  florian
+  Revision 1.20  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.19  2001/08/26 13:36:42  florian
     * some cg reorganisation
     * some PPC updates
 

+ 8 - 5
compiler/nopt.pas

@@ -62,11 +62,13 @@ type
   taddsstringcharoptnode = class(taddsstringoptnode)
     constructor create(l,r : tnode); virtual;
   end;
+  taddsstringcharoptnodeclass = class of taddsstringcharoptnode;
 
   { add a constant string to a short string }
   taddsstringcsstringoptnode = class(taddsstringoptnode)
     constructor create(l,r : tnode); virtual;
   end;
+  taddsstringcsstringoptnodeclass = class of taddsstringcsstringoptnode;
 
 function canbeaddsstringcharoptnode(p: taddnode): boolean;
 function genaddsstringcharoptnode(p: taddnode): tnode;
@@ -77,10 +79,8 @@ function genaddsstringcsstringoptnode(p: taddnode): tnode;
 function is_addsstringoptnode(p: tnode): boolean;
 
 var
-{  these are never used directly
-   caddoptnode: class of taddoptnode; }
-   caddsstringcharoptnode: class of taddsstringcharoptnode;
-   caddsstringcsstringoptnode: class of taddsstringcsstringoptnode;
+   caddsstringcharoptnode: taddsstringcharoptnodeclass;
+   caddsstringcsstringoptnode: taddsstringcsstringoptnodeclass;
 
 implementation
 
@@ -278,7 +278,10 @@ end.
 
 {
   $Log$
-  Revision 1.4  2001-08-26 13:36:43  florian
+  Revision 1.5  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.4  2001/08/26 13:36:43  florian
     * some cg reorganisation
     * some PPC updates
 

+ 12 - 5
compiler/nset.pas

@@ -54,18 +54,21 @@ interface
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tsetelementnodeclass = class of tsetelementnode;
 
        tinnode = class(tbinopnode)
           constructor create(l,r : tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       tinnodeclass = class of tinnode;
 
        trangenode = class(tbinarynode)
           constructor create(l,r : tnode);virtual;
           function det_resulttype:tnode;override;
           function pass_1 : tnode;override;
        end;
+       trangenodeclass = class of trangenode;
 
        tcasenode = class(tbinarynode)
           nodes : pcaserecord;
@@ -78,12 +81,13 @@ interface
           function pass_1 : tnode;override;
           function docompare(p: tnode): boolean; override;
        end;
+       tcasenodeclass = class of tcasenode;
 
     var
-       csetelementnode : class of tsetelementnode;
-       cinnode : class of tinnode;
-       crangenode : class of trangenode;
-       ccasenode : class of tcasenode;
+       csetelementnode : tsetelementnodeclass;
+       cinnode : tinnodeclass;
+       crangenode : trangenodeclass;
+       ccasenode : tcasenodeclass;
 
     { counts the labels }
     function case_count_labels(root : pcaserecord) : longint;
@@ -584,7 +588,10 @@ begin
 end.
 {
   $Log$
-  Revision 1.14  2001-08-26 13:36:43  florian
+  Revision 1.15  2001-09-02 21:12:07  peter
+    * move class of definitions into type section for delphi
+
+  Revision 1.14  2001/08/26 13:36:43  florian
     * some cg reorganisation
     * some PPC updates