Ver código fonte

* has_rtti should be saved in the ppu for objects

peter 26 anos atrás
pai
commit
aeb5fb9b9a
1 arquivos alterados com 16 adições e 4 exclusões
  1. 16 4
      compiler/symdef.inc

+ 16 - 4
compiler/symdef.inc

@@ -3171,10 +3171,13 @@ Const local_symtable_index : longint = $8001;
          objname:=stringdup(readstring);
          childof:=pobjectdef(readdefref);
          readsmallset(objectoptions);
+         has_rtti:=boolean(readbyte);
+
          oldread_member:=read_member;
          read_member:=true;
          symtable:=new(psymtable,loadas(objectsymtable));
          read_member:=oldread_member;
+
          symtable^.defowner:=@self;
          symtable^.name := stringdup(objname^);
 
@@ -3185,7 +3188,6 @@ Const local_symtable_index : longint = $8001;
             is_class and
             (objname^='TOBJECT') then
            class_tobject:=@self;
-         has_rtti:=true;
        end;
 
 
@@ -3210,6 +3212,7 @@ Const local_symtable_index : longint = $8001;
          writestring(objname^);
          writedefref(childof);
          writesmallset(objectoptions);
+         writebyte(byte(has_rtti));
          current_ppu^.writeentry(ibobjectdef);
 
          oldread_member:=read_member;
@@ -3633,7 +3636,10 @@ Const local_symtable_index : longint = $8001;
                      internalerror(1509992);
                    { access to implicit class property as field }
                    proctypesinfo:=(0 shl 0) or (0 shl 2) or (0 shl 4);
-                   rttilist^.concat(new(pai_const_symbol,initname(pvarsym(sym)^.vartype.def^.get_rtti_label)));
+                   if not pvarsym(sym)^.vartype.def^.has_rtti then
+                     rttilist^.concat(new(pai_const,init_32bit(0)))
+                   else
+                     rttilist^.concat(new(pai_const_symbol,initname(pvarsym(sym)^.vartype.def^.get_rtti_label)));
                    rttilist^.concat(new(pai_const,init_32bit(pvarsym(sym)^.address)));
                    rttilist^.concat(new(pai_const,init_32bit(pvarsym(sym)^.address)));
                    { per default stored }
@@ -3654,7 +3660,10 @@ Const local_symtable_index : longint = $8001;
                      proctypesinfo:=$40
                    else
                      proctypesinfo:=0;
-                   rttilist^.concat(new(pai_const_symbol,initname(ppropertysym(sym)^.proptype.def^.get_rtti_label)));
+                   if not ppropertysym(sym)^.proptype.def^.has_rtti then
+                     rttilist^.concat(new(pai_const,init_32bit(0)))
+                   else
+                     rttilist^.concat(new(pai_const_symbol,initname(ppropertysym(sym)^.proptype.def^.get_rtti_label)));
                    writeproc(ppropertysym(sym)^.readaccess,0);
                    writeproc(ppropertysym(sym)^.writeaccess,2);
                    { isn't it stored ? }
@@ -3843,7 +3852,10 @@ Const local_symtable_index : longint = $8001;
 
 {
   $Log$
-  Revision 1.181  1999-12-18 14:55:21  florian
+  Revision 1.182  1999-12-19 17:00:27  peter
+    * has_rtti should be saved in the ppu for objects
+
+  Revision 1.181  1999/12/18 14:55:21  florian
     * very basic widestring support
 
   Revision 1.180  1999/12/06 18:21:03  peter