浏览代码

* fixed wrong note about explictly valued enumeration types if the lower
bound is <= -1

git-svn-id: trunk@4182 -

Jonas Maebe 19 年之前
父节点
当前提交
a12f293781
共有 3 个文件被更改,包括 15 次插入2 次删除
  1. 1 0
      .gitattributes
  2. 4 2
      compiler/ptype.pas
  3. 10 0
      tests/tbs/tb0502.pp

+ 1 - 0
.gitattributes

@@ -5763,6 +5763,7 @@ tests/tbs/tb0498.pp svneol=native#text/plain
 tests/tbs/tb0499.pp svneol=native#text/plain
 tests/tbs/tb0500.pp svneol=native#text/plain
 tests/tbs/tb0501.pp svneol=native#text/plain
+tests/tbs/tb0502.pp svneol=native#text/plain
 tests/tbs/ub0060.pp svneol=native#text/plain
 tests/tbs/ub0069.pp svneol=native#text/plain
 tests/tbs/ub0119.pp svneol=native#text/plain

+ 4 - 2
compiler/ptype.pas

@@ -590,7 +590,7 @@ implementation
         p  : tnode;
         pd : tabstractprocdef;
         is_func,
-        enumdupmsg : boolean;
+        enumdupmsg, first : boolean;
         newtype    : ttypesym;
         oldlocalswitches : tlocalswitches;
       begin
@@ -603,6 +603,7 @@ implementation
            _LKLAMMER:
               begin
                 consume(_LKLAMMER);
+                first := true;
                 { allow negativ value_str }
                 l:=-1;
                 enumdupmsg:=false;
@@ -641,7 +642,7 @@ implementation
                        p.free;
                        { please leave that a note, allows type save }
                        { declarations in the win32 units ! }
-                       if (v<=l) and (not enumdupmsg) then
+                       if (not first) and (v<=l) and (not enumdupmsg) then
                         begin
                           Message(parser_n_duplicate_enum);
                           enumdupmsg:=true;
@@ -650,6 +651,7 @@ implementation
                     end
                   else
                     inc(l);
+                  first := false;
                   storepos:=akttokenpos;
                   akttokenpos:=defpos;
                   tstoredsymtable(aktenumdef.owner).insert(tenumsym.create(s,aktenumdef,l));

+ 10 - 0
tests/tbs/tb0502.pp

@@ -0,0 +1,10 @@
+{ %norun }
+{ %opt=-Sen }
+type
+      TRegister = (
+        TRegisterLowEnum := Low(longint),
+        TRegisterHighEnum := High(longint)
+      );
+
+begin
+end.