Răsfoiți Sursa

Merged revisions 3578 via svnmerge from
http://svn.freepascal.org/svn/fpc/trunk

r3578 (florian)
+ parse packed set, fixes #6735

git-svn-id: branches/fixes_2_0@3579 -

florian 19 ani în urmă
părinte
comite
779403b126
3 a modificat fișierele cu 44 adăugiri și 29 ștergeri
  1. 1 0
      .gitattributes
  2. 38 29
      compiler/ptype.pas
  3. 5 0
      tests/webtbs/tw6735.pp

+ 1 - 0
.gitattributes

@@ -6486,6 +6486,7 @@ tests/webtbs/tw4950.pp svneol=native#text/plain
 tests/webtbs/tw4999.pp svneol=native#text/plain
 tests/webtbs/tw5036.pp svneol=native#text/plain
 tests/webtbs/tw5082.pp -text svneol=unset#text/plain
+tests/webtbs/tw6735.pp svneol=native#text/plain
 tests/webtbs/ub1873.pp svneol=native#text/plain
 tests/webtbs/ub1883.pp svneol=native#text/plain
 tests/webtbs/uw0555.pp svneol=native#text/plain

+ 38 - 29
compiler/ptype.pas

@@ -331,7 +331,41 @@ implementation
            pt1.free;
         end;
 
-        procedure array_dec;
+
+      procedure set_dec;
+        begin
+          consume(_SET);
+          consume(_OF);
+          read_anon_type(tt2,true);
+          if assigned(tt2.def) then
+           begin
+             case tt2.def.deftype of
+               { don't forget that min can be negativ  PM }
+               enumdef :
+                 if tenumdef(tt2.def).min>=0 then
+                  // !! tt.setdef(tsetdef.create(tt2,tenumdef(tt2.def).min,tenumdef(tt2.def).max))
+                  tt.setdef(tsetdef.create(tt2,tenumdef(tt2.def).max))
+                 else
+                  Message(sym_e_ill_type_decl_set);
+               orddef :
+                 begin
+                   if (torddef(tt2.def).typ<>uvoid) and
+                      (torddef(tt2.def).low>=0) then
+                     // !! tt.setdef(tsetdef.create(tt2,torddef(tt2.def).low,torddef(tt2.def).high))
+                     tt.setdef(tsetdef.create(tt2,torddef(tt2.def).high))
+                   else
+                     Message(sym_e_ill_type_decl_set);
+                 end;
+               else
+                 Message(sym_e_ill_type_decl_set);
+             end;
+           end
+          else
+           tt:=generrortype;
+        end;
+
+
+      procedure array_dec;
         var
           lowval,
           highval   : aint;
@@ -542,34 +576,7 @@ implementation
               end;
             _SET:
               begin
-                consume(_SET);
-                consume(_OF);
-                read_type(tt2,'',true);
-                if assigned(tt2.def) then
-                 begin
-                   case tt2.def.deftype of
-                     { don't forget that min can be negativ  PM }
-                     enumdef :
-                       if tenumdef(tt2.def).min>=0 then
-                        // !! tt.setdef(tsetdef.create(tt2,tenumdef(tt2.def).min,tenumdef(tt2.def).max))
-                        tt.setdef(tsetdef.create(tt2,tenumdef(tt2.def).max))
-                       else
-                        Message(sym_e_ill_type_decl_set);
-                     orddef :
-                       begin
-                         if (torddef(tt2.def).typ<>uvoid) and
-                            (torddef(tt2.def).low>=0) then
-                           // !! tt.setdef(tsetdef.create(tt2,torddef(tt2.def).low,torddef(tt2.def).high))
-                           tt.setdef(tsetdef.create(tt2,torddef(tt2.def).high))
-                         else
-                           Message(sym_e_ill_type_decl_set);
-                       end;
-                     else
-                       Message(sym_e_ill_type_decl_set);
-                   end;
-                 end
-                else
-                 tt:=generrortype;
+                set_dec;
               end;
            _CARET:
               begin
@@ -586,6 +593,8 @@ implementation
                 consume(_PACKED);
                 if token=_ARRAY then
                   array_dec
+                else if token=_SET then
+                  set_dec
                 else
                   begin
                     oldaktpackrecords:=aktpackrecords;

+ 5 - 0
tests/webtbs/tw6735.pp

@@ -0,0 +1,5 @@
+type
+  t=packed set of 0..7;
+  
+begin
+end.