Răsfoiți Sursa

* fix boolean range parsing false..true
* allow set of boolean

git-svn-id: trunk@1690 -

peter 20 ani în urmă
părinte
comite
e00ef44479
4 a modificat fișierele cu 24 adăugiri și 17 ștergeri
  1. 2 0
      .gitattributes
  2. 7 17
      compiler/ptype.pas
  3. 5 0
      tests/webtbs/tw4477.pp
  4. 10 0
      tests/webtbs/tw4496.pp

+ 2 - 0
.gitattributes

@@ -6349,8 +6349,10 @@ tests/webtbs/tw4398.pp svneol=native#text/plain
 tests/webtbs/tw4427.pp svneol=native#text/plain
 tests/webtbs/tw4428.pp svneol=native#text/plain
 tests/webtbs/tw4450.pp svneol=native#text/plain
+tests/webtbs/tw4477.pp svneol=native#text/plain
 tests/webtbs/tw4487.pp -text svneol=unset#text/plain
 tests/webtbs/tw4489.pp -text svneol=unset#text/plain
+tests/webtbs/tw4496.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

+ 7 - 17
compiler/ptype.pas

@@ -308,7 +308,7 @@ implementation
                                tt.setdef(torddef.create(uchar,lv,hv))
                              else
                                if is_boolean(pt1.resulttype.def) then
-                                 tt.setdef(torddef.create(bool8bit,l,hv))
+                                 tt.setdef(torddef.create(bool8bit,lv,hv))
                                else
                                  tt.setdef(torddef.create(range_to_basetype(lv,hv),lv,hv));
                            end;
@@ -556,22 +556,12 @@ implementation
                         Message(sym_e_ill_type_decl_set);
                      orddef :
                        begin
-                         case torddef(tt2.def).typ of
-                           uchar :
-                             //!!! tt.setdef(tsetdef.create(tt2,0,255));
-                             tt.setdef(tsetdef.create(tt2,255));
-                           u8bit,u16bit,u32bit,
-                           s8bit,s16bit,s32bit :
-                             begin
-                               if (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;
+                         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);

+ 5 - 0
tests/webtbs/tw4477.pp

@@ -0,0 +1,5 @@
+{ Source provided for Free Pascal Bug Report 4477 }
+{ Submitted by "Alexey Moiseitsev" on  2005-10-30 }
+{ e-mail: [email protected] }
+var f : set of boolean;
+begin end.

+ 10 - 0
tests/webtbs/tw4496.pp

@@ -0,0 +1,10 @@
+type
+  //BoolDeriv = Boolean; //gives no internal error
+  BoolDeriv = false..true;
+
+var
+  a: array[BoolDeriv] of char;
+
+begin
+  a[true] := 'a'; //ierror 99080501 here
+end.