mirror of
https://github.com/xomboverlord/ldc.git
synced 2026-08-03 04:50:05 +02:00
[svn r118] Fixed dynamic casts.
Fixed a few interface bugs.
This commit is contained in:
47
test/classes9.d
Normal file
47
test/classes9.d
Normal 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
32
test/interface5.d
Normal 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
44
test/interface6.d
Normal 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
21
test/interface7.d
Normal 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);
|
||||
}
|
||||
Reference in New Issue
Block a user