[svn r118] Fixed dynamic casts.

Fixed a few interface bugs.
This commit is contained in:
Tomas Lindquist Olsen
2007-11-25 00:19:13 +01:00
parent b43f5729b0
commit 541a677a54
11 changed files with 243 additions and 49 deletions

47
test/classes9.d Normal file
View File

@@ -0,0 +1,47 @@
module classes9;
class C
{
}
class D : C
{
}
class E
{
}
class F : E
{
}
void main()
{
{
D d = new D;
{
C c = d;
assert(c !is null);
D d2 = cast(D)c;
assert(d2 !is null);
E e = cast(E)d;
assert(e is null);
F f = cast(F)d;
assert(f is null);
}
}
{
F f = new F;
{
E e = f;
assert(e !is null);
F f2 = cast(F)e;
assert(f2 !is null);
C c = cast(C)f;
assert(c is null);
D d2 = cast(D)f;
assert(d2 is null);
}
}
}

32
test/interface5.d Normal file
View File

@@ -0,0 +1,32 @@
module interface5;
interface I
{
void func();
}
class C : I
{
int i;
void func()
{
printf("C\n");
i++;
}
}
void main()
{
C c = new C;
c.func();
{
I i = c;
c.func();
C c2 = cast(C)i;
c2.func();
c.func();
assert(c.i == 4);
}
}

44
test/interface6.d Normal file
View File

@@ -0,0 +1,44 @@
module interface6;
interface I
{
void Ifunc();
}
interface J
{
void Jfunc();
}
class C : I,J
{
int i;
int j;
void Ifunc()
{
i++;
}
void Jfunc()
{
j++;
}
}
void main()
{
C c = new C;
c.Ifunc();
c.Jfunc();
I i = c;
i.Ifunc();
J j = c;
j.Jfunc();
C c2 = cast(C)i;
c2.Ifunc();
c2.Jfunc();
C c3 = cast(C)j;
c3.Ifunc();
c3.Jfunc();
assert(c.i == 4);
assert(c.j == 4);
}

21
test/interface7.d Normal file
View File

@@ -0,0 +1,21 @@
module interface7;
interface I
{
}
class C : I
{
}
void main()
{
I i = new C;
ClassInfo ci = i.classinfo;
char[] name = ci.name;
printf("ci.name = %.*s\n", name.length, name.ptr);
ClassInfo cI = I.classinfo;
name = cI.name;
printf("cI.name = %.*s\n", name.length, name.ptr);
assert(ci is cI);
}