Fix #198 and #199 by making CTFE on static struct initializers work.

Renamed SymbolDeclaration to StaticStructInitDeclaration to make its usage clearer.
This commit is contained in:
Christian Kamm
2009-02-01 20:20:56 +01:00
parent 07649678db
commit 01f19c466c
9 changed files with 64 additions and 29 deletions

View File

@@ -0,0 +1,12 @@
struct Color {
uint c;
static Color opCall(uint _c) { Color ret; ret.c = _c; return ret; }
}
// run at compile time
static const Color white = Color(0xffffffff);
void main()
{
assert(white.c == 0xffffffff);
}

View File

@@ -0,0 +1,25 @@
struct Color {
uint c;
}
struct Vertex {
double x, y;
Color c;
static Vertex opCall(double x, double y, Color c) {
Vertex ret;
ret.x = x;
ret.y = y;
ret.c = c;
return ret;
}
}
void main() {
Color c = {0xffffffff};
auto v = Vertex(1, 5, c);
assert(v.x == 1 && v.y == 5); // passes
assert(v.c.c == 0xffffffff); // fails in LDC
}