I'm having some trouble with the order in which `static this()`
runs. This is the order defined in the source file, numbered for
convenience:
```
logInfo("static this 1 initialModel");
logInfo("static this 1 initialModel done");
logInfo("static this 2 array branchfactor");
logInfo("static this 2 array branchfactor done");
logInfo("static this 3 array shiftstep");
logInfo("static this 3 array shiftstep done");
logInfo("static this 4 cmd none [template:%s]", typeid(msg));
logInfo("static this 4 cmd none [template:%s] done", typeid(msg));
logInfo("static this 5 main");
logInfo("static this 5 main done");
```
It's also the same order that `-vcg-ast` outputs. However, at
runtime, I'm consistently seeing this order, where 5 and 4 are
swapped:
```
[main(----) INF] static this 1 initialModel
[main(----) INF] static this 1 initialModel done
[main(----) INF] static this 2 array branchfactor
[main(----) INF] static this 2 array branchfactor done
[main(----) INF] static this 3 array shiftstep
[main(----) INF] static this 3 array shiftstep done
[main(----) INF] static this 5 main
[main(----) INF] static this 5 main done
[main(----) INF] static this 4 cmd none
[template:delm.output.MsgT]
[main(----) INF] static this 4 cmd none
[template:delm.output.MsgT] done
```
which leads to segfaults later on since static this 5 reads
variables set up by static this 4.
The spec says that "The static constructors are run in lexical
order" https://dlang.org/spec/module.html#staticorder . Is
lexical order the same as the order things are defined in the
source file?
I'm running `DMD64 D Compiler v2.090.1` on macos 10.14.6, in case
that matters. I'm seeing the same issue with LDC `(1.19.0) based
on DMD v2.089.1 and LLVM 9.0.0`