Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.


Written in the D programming language. Module initialization routines.
Distributed under the Boost Software License 1.0. (See accompanying file LICENSE)
Walter Bright, Sean Kelly

Source rt/minfo.d

struct ModuleGroup;
A ModuleGroup is an unordered collection of modules. There is exactly one for: 1. all statically linked in D modules, either directely or as shared libraries 2. each call to rt_loadLibrary()
void sortCtors(string cycleHandling);

void sortCtors();
Allocate and fill in ctors[] and tlsctors[]. Modules are inserted into the arrays in the order in which the constructors need to be run.
Exception if it fails.
bool sortCtorsOld(int[][] edges);
This is the old ctor sorting algorithm that does not find all cycles.
It is here to allow the deprecated behavior from the original algorithm until people have fixed their code.
If no cycles are found, the ctors and tlsctors are replaced with the ones generated by this algorithm to preserve the old incorrect ordering behavior.
int[][] edges The module edges as found in the importedModules member of each ModuleInfo. Generated in sortCtors.
true if no cycle is found, false if one was.
int moduleinfos_apply(scope int delegate(immutable(ModuleInfo*)) dg);
Iterate over all module infos.
void rt_moduleCtor();
Module constructor and destructor routines.
void rt_moduleTlsCtor();
Module constructor and destructor routines.
void rt_moduleTlsDtor();
Module constructor and destructor routines.
void rt_moduleDtor();
Module constructor and destructor routines.
void runModuleFuncs(alias getfp)(const(immutable(ModuleInfo)*)[] modules);