Przeglądaj źródła

* fix type parsing in records

peter 22 lat temu
rodzic
commit
3b771392a1
1 zmienionych plików z 24 dodań i 2 usunięć
  1. 24 2
      compiler/pdecvar.pas

+ 24 - 2
compiler/pdecvar.pas

@@ -133,6 +133,7 @@ implementation
          pt : tnode;
          vs,vs2    : tvarsym;
          srsym : tsym;
+         oldsymtablestack,
          srsymtable : tsymtable;
          unionsymtable : trecordsymtable;
          offset : longint;
@@ -179,7 +180,17 @@ implementation
              { this is needed for Delphi mode at least
                but should be OK for all modes !! (PM) }
              ignore_equal:=true;
-             read_type(tt,'');
+             if is_record or is_object then
+              begin
+                { for records, don't search the recordsymtable for
+                  the symbols of the types }
+                oldsymtablestack:=symtablestack;
+                symtablestack:=symtablestack.next;
+                read_type(tt,'');
+                symtablestack:=oldsymtablestack;
+              end
+             else
+              read_type(tt,'');
              { types that use init/final are not allowed in variant parts, but
                classes are allowed }
              if (variantrecordlevel>0) and
@@ -495,7 +506,12 @@ implementation
               { may be only a type: }
               if assigned(srsym) and (srsym.typ in [typesym,unitsym]) then
                begin
+                 { for records, don't search the recordsymtable for
+                   the symbols of the types }
+                 oldsymtablestack:=symtablestack;
+                 symtablestack:=symtablestack.next;
                  read_type(casetype,'');
+                 symtablestack:=oldsymtablestack;
                end
               else
                 begin
@@ -503,7 +519,10 @@ implementation
                   consume(_COLON);
                   { for records, don't search the recordsymtable for
                     the symbols of the types }
+                  oldsymtablestack:=symtablestack;
+                  symtablestack:=symtablestack.next;
                   read_type(casetype,'');
+                  symtablestack:=oldsymtablestack;
                   vs:=tvarsym.create(sorg,vs_value,casetype);
                   tabstractrecordsymtable(symtablestack).insertfield(vs,true);
                 end;
@@ -598,7 +617,10 @@ implementation
 end.
 {
   $Log$
-  Revision 1.52  2003-10-01 19:05:33  peter
+  Revision 1.53  2003-10-02 15:12:07  peter
+    * fix type parsing in records
+
+  Revision 1.52  2003/10/01 19:05:33  peter
     * searchsym_type to search for type definitions. It ignores
       records,objects and parameters