Bladeren bron

compiler: don't allow to access an enum members through the enum member. It should be only possible throught the enum type name. Fixes issue #0025029

git-svn-id: trunk@25493 -
paul 12 jaren geleden
bovenliggende
commit
93f1ba4493
3 gewijzigde bestanden met toevoegingen van 11 en 1 verwijderingen
  1. 1 0
      .gitattributes
  2. 1 1
      compiler/pexpr.pas
  3. 9 0
      tests/webtbf/tw25029.pp

+ 1 - 0
.gitattributes

@@ -12455,6 +12455,7 @@ tests/webtbf/tw24428a.pp svneol=native#text/plain
 tests/webtbf/tw24495.pp svneol=native#text/pascal
 tests/webtbf/tw24588.pp svneol=native#text/pascal
 tests/webtbf/tw2478.pp svneol=native#text/plain
+tests/webtbf/tw25029.pp svneol=native#text/pascal
 tests/webtbf/tw2562.pp svneol=native#text/plain
 tests/webtbf/tw2657.pp svneol=native#text/plain
 tests/webtbf/tw2670.pp svneol=native#text/plain

+ 1 - 1
compiler/pexpr.pas

@@ -2096,7 +2096,7 @@ implementation
                      if token=_ID then
                        begin
                          srsym:=tsym(tenumdef(p1.resultdef).symtable.Find(pattern));
-                         if assigned(srsym) and (srsym.typ=enumsym) then
+                         if assigned(srsym) and (srsym.typ=enumsym) and (p1.nodetype=typen) then
                            begin
                              p1.destroy;
                              check_hints(srsym,srsym.symoptions,srsym.deprecatedmsg);

+ 9 - 0
tests/webtbf/tw25029.pp

@@ -0,0 +1,9 @@
+{%FAIL}
+program tw25029;
+type
+  TMyEnum = (me1, me2, me3);
+var
+  e: TMyEnum;
+begin
+  e := me1.me2;
+end.