Browse Source

+ generics context sensitivity test

git-svn-id: trunk@7023 -
micha 18 years ago
parent
commit
245ce6f9a8
3 changed files with 53 additions and 0 deletions
  1. 2 0
      .gitattributes
  2. 24 0
      tests/test/tgeneric14.pp
  3. 27 0
      tests/test/ugeneric14.pp

+ 2 - 0
.gitattributes

@@ -6768,6 +6768,7 @@ tests/test/tgeneric10.pp svneol=native#text/plain
 tests/test/tgeneric11.pp svneol=native#text/plain
 tests/test/tgeneric12.pp svneol=native#text/plain
 tests/test/tgeneric13.pp svneol=native#text/plain
+tests/test/tgeneric14.pp svneol=native#text/plain
 tests/test/tgeneric2.pp svneol=native#text/plain
 tests/test/tgeneric3.pp svneol=native#text/plain
 tests/test/tgeneric4.pp svneol=native#text/plain
@@ -6925,6 +6926,7 @@ tests/test/uabstrcl.pp svneol=native#text/plain
 tests/test/uenum2a.pp svneol=native#text/plain
 tests/test/uenum2b.pp svneol=native#text/plain
 tests/test/ugeneric10.pp svneol=native#text/plain
+tests/test/ugeneric14.pp svneol=native#text/plain
 tests/test/ugeneric3.pp svneol=native#text/plain
 tests/test/ugeneric4.pp svneol=native#text/plain
 tests/test/uimpluni1.pp svneol=native#text/plain

+ 24 - 0
tests/test/tgeneric14.pp

@@ -0,0 +1,24 @@
+{$mode objfpc}
+
+{ we test the context sensitivity of generics here, by checking whether names
+  are looked up at specialization or at definition time }
+
+uses
+  ugeneric14;
+
+const
+  Foo = 4;
+
+type
+  TIntTest = specialize TGTest<Integer>;
+
+var
+  A: TIntTest;
+begin
+  A := TIntTest.Create;
+  A.DoSomething;
+  writeln(A.data);
+  if A.data = 4 then
+    halt(1);
+  A.Free;
+end.

+ 27 - 0
tests/test/ugeneric14.pp

@@ -0,0 +1,27 @@
+unit ugeneric14;
+
+{$mode objfpc}
+
+interface
+
+type
+  generic TGTest<T> = class
+  public
+    data: T;
+    procedure DoSomething;
+  end;
+
+implementation
+
+function Foo: Integer;
+begin
+  writeln('foo');
+  Result := 1;
+end;
+
+procedure TGTest.DoSomething;
+begin
+  data := Foo;
+end;
+
+end.