Bug#583837:
See Order or Static Construction.
Circular dependencies are allowed so long as not both of the modules contain static ctors or dtors, else will result in a runtime exception.
The very simplest example of this is:
===
a.d
===
module a;
import b;
class A {
static this() {}
}
===
b.d
===
module b;
import a;
class B {
static this() {}
}
===
main.d
===
void main() {}
I don't think this is really a compiler bug per se, but attached is a patch for torus that should resolve the conflict and still satisfy runtime.
Regards
--
Iain Buclaw
*(p < e ? p++ : p) = (c & 0x0f) + '0';
diff -ur torus-trooper-0.22.dfsg1.orig/src/abagames/tt/particle.d torus-trooper-0.22.dfsg1/src/abagames/tt/particle.d
--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/particle.d 2005-01-01 21:40:28.000000000 +0000
+++ torus-trooper-0.22.dfsg1/src/abagames/tt/particle.d 2010-05-31 01:25:09.788741816 +0100
@@ -26,7 +26,7 @@
private:
static const float GRAVITY = 0.02;
static const float SIZE = 0.3;
- static Rand rand;
+ static Rand _rand;
Tunnel tunnel;
Ship ship;
Vector3 pos;
@@ -42,8 +42,11 @@
float d1, d2, md1, md2;
float width, height;
- public static this() {
- rand = new Rand;
+ public static Rand rand() {
+ if (_rand is null)
+ _rand = new Rand;
+
+ return _rand;
}
public static void setRandSeed(long seed) {
diff -ur torus-trooper-0.22.dfsg1.orig/src/abagames/tt/shape.d torus-trooper-0.22.dfsg1/src/abagames/tt/shape.d
--- torus-trooper-0.22.dfsg1.orig/src/abagames/tt/shape.d 2004-11-12 23:46:02.000000000 +0000
+++ torus-trooper-0.22.dfsg1/src/abagames/tt/shape.d 2010-05-31 01:24:29.344714781 +0100
@@ -58,7 +58,7 @@
SMALL, MIDDLE, LARGE
}
private:
- static Rand rand;
+ static Rand _rand;
Structure[] structure;
Vector _collision;
DisplayList displayList;
@@ -66,8 +66,11 @@
Vector rocketPos, fragmentPos;
int color;
- static this() {
- rand = new Rand;
+ static Rand rand() {
+ if (_rand is null)
+ _rand = new Rand;
+
+ return _rand;
}
public this(long randSeed) {
Reply to: