annotate lphobos/std/moduleinit.d @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents 373489eeaf90
children eef8ac26c66c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
1 // Modified for LLVMDC
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
2
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
3 module std.moduleinit;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
4
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
5 //debug = 1;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
6
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
7 private
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
8 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
9 import object;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
10 import std.c.stdio;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
11 import std.c.stdlib;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
12 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
13
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
14 enum
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
15 { MIctorstart = 1, // we've started constructing it
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
16 MIctordone = 2, // finished construction
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
17 MIstandalone = 4, // module ctor does not depend on other module
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
18 // ctors being done first
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
19 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
20
116
fd7ad91fd713 [svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents: 89
diff changeset
21 // had to move the class to object.d, as its declaration is needed in the compiler code,
fd7ad91fd713 [svn r120] ModuleInfo implementation is now almost complete.
lindquist
parents: 89
diff changeset
22 // otherwise the DMDFE Module::moduleinfo member is NULL
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
23
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
24 class ModuleCtorError : Exception
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
25 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
26 this(ModuleInfo m)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
27 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
28 super("circular initialization dependency with module " ~ m.name);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
29 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
30 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
31
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
32
117
56a21f3e5d3e [svn r121] Finished ModuleInfo implementation.
lindquist
parents: 116
diff changeset
33 // this gets initialized in _moduleCtor()
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
34 extern (C) ModuleInfo[] _moduleinfo_array;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
35
117
56a21f3e5d3e [svn r121] Finished ModuleInfo implementation.
lindquist
parents: 116
diff changeset
36 // this method returns the linker constructed, null terminated, array of moduleinfos
56a21f3e5d3e [svn r121] Finished ModuleInfo implementation.
lindquist
parents: 116
diff changeset
37 extern (C) void** _d_get_moduleinfo_array();
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
38
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
39 ModuleInfo[] _moduleinfo_dtors;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
40 uint _moduleinfo_dtors_i;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
41
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
42 // Register termination function pointers
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
43 extern (C) int _fatexit(void *);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
44
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
45 /*************************************
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
46 * Initialize the modules.
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
47 */
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
48
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
49 extern (C) void _moduleCtor()
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
50 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
51 debug printf("_moduleCtor()\n");
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
52 int len = 0;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
53
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
54 for (auto mr = _Dmodule_ref; mr; mr=mr.next)
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
55 len++;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
56 _moduleinfo_array = new ModuleInfo[len];
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
57 len = 0;
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
58 for (auto mr = _Dmodule_ref; mr; mr=mr.next)
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
59 { _moduleinfo_array[len] = mr.mod;
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
60 len++;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
61 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
62
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
63 version (Win32)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
64 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
65 // Ensure module destructors also get called on program termination
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
66 //_fatexit(&_STD_moduleDtor);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
67 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
68
117
56a21f3e5d3e [svn r121] Finished ModuleInfo implementation.
lindquist
parents: 116
diff changeset
69 _moduleinfo_dtors = new ModuleInfo[len];
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
70 debug printf("_moduleinfo_dtors = x%x\n", cast(void *)_moduleinfo_dtors);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
71 _moduleCtor2(_moduleinfo_array, 0);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
72
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
73 version (none)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
74 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
75 foreach (m; _moduleinfo_array)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
76 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
77 writefln("module %s, %d", m.name, m.localClasses.length);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
78 foreach (c; m.localClasses)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
79 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
80 writefln("\tclass %s", c.name);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
81 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
82 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
83 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
84 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
85
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
86 void _moduleCtor2(ModuleInfo[] mi, int skip)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
87 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
88 debug printf("_moduleCtor2(): %d modules\n", mi.length);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
89 for (uint i = 0; i < mi.length; i++)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
90 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
91 ModuleInfo m = mi[i];
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
92
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
93 debug printf("\tmodule[%d] = '%p'\n", i, m);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
94 if (!m)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
95 continue;
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
96 debug printf("\tmodule[%d] = '%.*s'\n", i, m.name.length, m.name.ptr);
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
97 if (m.flags & MIctordone)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
98 continue;
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
99 debug printf("\tmodule[%d] = '%.*s', m = 0x%x\n", i, m.name.length, m.name.ptr, m);
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
100
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
101 if (m.ctor || m.dtor)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
102 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
103 if (m.flags & MIctorstart)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
104 { if (skip || m.flags & MIstandalone)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
105 continue;
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
106 debug printf("\tmodule[%d] = '%.*s', cyclic dependency!\n", i, m.name.length, m.name.ptr);
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
107 int x = 0; x /= x;
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
108 throw new ModuleCtorError(m);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
109 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
110
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
111 m.flags |= MIctorstart;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
112 _moduleCtor2(m.importedModules, 0);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
113 if (m.ctor)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
114 (*m.ctor)();
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
115 m.flags &= ~MIctorstart;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
116 m.flags |= MIctordone;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
117
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
118 // Now that construction is done, register the destructor
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
119 //printf("\tadding module dtor x%x\n", m);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
120 assert(_moduleinfo_dtors_i < _moduleinfo_dtors.length);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
121 _moduleinfo_dtors[_moduleinfo_dtors_i++] = m;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
122 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
123 else
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
124 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
125 m.flags |= MIctordone;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
126 _moduleCtor2(m.importedModules, 1);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
127 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
128 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
129 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
130
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
131
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
132 /**********************************
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
133 * Destruct the modules.
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
134 */
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
135
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
136 // Starting the name with "_STD" means under linux a pointer to the
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
137 // function gets put in the .dtors segment.
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
138
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
139 extern (C) void _moduleDtor()
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
140 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
141 debug printf("_moduleDtor(): %d modules\n", _moduleinfo_dtors_i);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
142 for (uint i = _moduleinfo_dtors_i; i-- != 0;)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
143 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
144 ModuleInfo m = _moduleinfo_dtors[i];
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
145
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
146 debug printf("\tmodule[%d] = '%.*s', x%x\n", i, m.name, m);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
147 if (m.dtor)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
148 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
149 (*m.dtor)();
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
150 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
151 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
152 debug printf("_moduleDtor() done\n");
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
153 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
154
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
155 /**********************************
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
156 * Run unit tests.
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
157 */
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
158
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
159 extern (C) void _moduleUnitTests()
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
160 {
473
373489eeaf90 Applied downs' lphobos update
Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
parents: 117
diff changeset
161 debug printf("_moduleUnitTests() %i\n", _moduleinfo_array.length);
89
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
162 for (uint i = 0; i < _moduleinfo_array.length; i++)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
163 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
164 ModuleInfo m = _moduleinfo_array[i];
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
165
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
166 if (!m)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
167 continue;
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
168
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
169 debug printf("\tmodule[%d] = '%.*s'\n", i, m.name);
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
170 if (m.unitTest)
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
171 {
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
172 (*m.unitTest)();
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
173 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
174 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
175 }
ccca1c13e13a [svn r93] a few fixes, some phobos additions.
lindquist
parents:
diff changeset
176