Hello Guys,
I took a few days off over easter and I have very good news for
you.
The following code will now compile and execute correctly using
newCTFE.
---
class C
{
int i() {return 1;}
}
class D : C
{
override int i() {return 2;}
float f() { return 1.0f; }
}
class E : D
{
override int i() {return 3;}
override float f() { return 2.0f; }
}
int testClassStuff ()
{
C c1, c2, c3;
D c4;
c1 = new C();
c2 = new D();
c3 = new E();
D e = new E();
assert(cast(int)e.f() == 2);
return c1.i + c2.i + c3.i;
}
static assert(testClassStuff == 1 + 2 + 3);
---
In short this means that classes and virtual function calls work
now.
albeit currently only if you don't define your own constructor,
which would currently get treated as normal function and
therefore not set the vtbl pointer correctly.
I'd also like to note that the vtbl handling is backend
independent which means that you code your own backend for
newCTFE without having to deal with the fact that vtbl and
constructor stuff is going on.
To you It's just load store and call. :)
Have a nice easter.
Stefan