Преглед на файлове

* allow generic parameters as array range, resolves #33414

git-svn-id: trunk@38532 -
florian преди 7 години
родител
ревизия
1bc322c218
променени са 3 файла, в които са добавени 28 реда и са изтрити 0 реда
  1. 1 0
      .gitattributes
  2. 7 0
      compiler/ptype.pas
  3. 20 0
      tests/webtbs/tw33414.pp

+ 1 - 0
.gitattributes

@@ -16076,6 +16076,7 @@ tests/webtbs/tw3328a.pp svneol=native#text/plain
 tests/webtbs/tw3328b.pp svneol=native#text/plain
 tests/webtbs/tw3334.pp svneol=native#text/plain
 tests/webtbs/tw3340.pp svneol=native#text/plain
+tests/webtbs/tw33414.pp svneol=native#text/pascal
 tests/webtbs/tw33417.pp svneol=native#text/pascal
 tests/webtbs/tw3348.pp svneol=native#text/plain
 tests/webtbs/tw3349.pp svneol=native#text/plain

+ 7 - 0
compiler/ptype.pas

@@ -1322,6 +1322,13 @@ implementation
                   else
                     Message1(parser_e_type_cant_be_used_in_array_index,def.typename);
                 end;
+              { generic parameter? }
+              undefineddef:
+                begin
+                  lowval:=0;
+                  highval:=1;
+                  indexdef:=def;
+                end;
               else
                 Message(sym_e_error_in_type_def);
             end;

+ 20 - 0
tests/webtbs/tw33414.pp

@@ -0,0 +1,20 @@
+{$mode objfpc}{$H+}
+uses Classes, SysUtils;
+
+type
+  generic TFoo<SomeEnum> = class
+    m: array[SomeEnum] of integer;
+  end;
+
+  TEnum = (e0, e1);
+
+var
+  a: specialize TFoo<TEnum>;
+
+begin
+  if low(a.m)<>e0 then
+    halt(1);
+  if high(a.m)<>e1 then
+    halt(1);
+  writeln('ok');
+end.