newCTFE Status March 2018
Stefan Koch
uplink.coder at googlemail.com
Fri Mar 30 19:48:02 UTC 2018
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
More information about the Digitalmars-d
mailing list