Browse Source

Fixing trying to consume ID for anonymous switch field

Frederic Kehrein 1 year ago
parent
commit
ba55932929
2 changed files with 31 additions and 9 deletions
  1. 12 9
      compiler/pdecvar.pas
  2. 19 0
      tests/test/tvrec1.pp

+ 12 - 9
compiler/pdecvar.pas

@@ -1982,16 +1982,19 @@ implementation
 
 
               { including a field declaration? }
               { including a field declaration? }
               fieldvs:=nil;
               fieldvs:=nil;
-              sorg:=orgpattern;
-              hs:=pattern;
-              searchsym(hs,srsym,srsymtable);
-              if not(assigned(srsym) and (srsym.typ in [typesym,unitsym])) then
+              if token=_ID then
                 begin
                 begin
-                  consume(_ID);
-                  consume(_COLON);
-                  fieldvs:=cfieldvarsym.create(sorg,vs_value,generrordef,[]);
-                  variantdesc^^.variantselector:=fieldvs;
-                  symtablestack.top.insertsym(fieldvs);
+                  sorg:=orgpattern;
+                  hs:=pattern;
+                  searchsym(hs,srsym,srsymtable);
+                  if not(assigned(srsym) and (srsym.typ in [typesym,unitsym])) then
+                    begin
+                      consume(_ID);
+                      consume(_COLON);
+                      fieldvs:=cfieldvarsym.create(sorg,vs_value,generrordef,[]);
+                      variantdesc^^.variantselector:=fieldvs;
+                      symtablestack.top.insertsym(fieldvs);
+                    end;
                 end;
                 end;
               read_anon_type(casetype,true);
               read_anon_type(casetype,true);
               block_type:=bt_var;
               block_type:=bt_var;

+ 19 - 0
tests/test/tvrec1.pp

@@ -0,0 +1,19 @@
+program tvrec1;
+
+type
+  TTestRec = record
+  case (A, B) of
+  A: (I: Integer);
+  B: (D: Double);
+  end;
+
+var
+  rec: TTestRec;
+begin
+  if @[email protected] then
+  begin
+    WriteLn('ok');
+    halt(0);
+  end;
+  halt(1);
+end.