Skip to content

Commit 432558a

Browse files
committed
fix the merge
1 parent a11e57b commit 432558a

File tree

5 files changed

+59
-11
lines changed

5 files changed

+59
-11
lines changed

source/app.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,8 @@ int main(string[] args) {
208208
nodes = optimiser.res;
209209
}
210210

211+
compiler.versions = preproc.versions;
212+
211213
try {
212214
compiler.Compile(nodes);
213215
}

source/compiler.d

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class Compiler {
6161
string[] includeDirs;
6262
string[] included;
6363
string outFile;
64+
string[] versions;
6465

6566
this() {
6667

@@ -144,12 +145,22 @@ class Compiler {
144145
break;
145146
}
146147
case NodeType.Let: backend.CompileLet(cast(LetNode) inode); break;
148+
case NodeType.Requires: {
149+
auto node = cast(RequiresNode) inode;
150+
151+
if (!versions.canFind(node.ver)) {
152+
backend.Error(node.error, "Version '%s' required");
153+
}
154+
break;
155+
}
147156
case NodeType.Array: backend.CompileArray(cast(ArrayNode) inode); break;
148157
case NodeType.String: backend.CompileString(cast(StringNode) inode); break;
149158
case NodeType.Struct: backend.CompileStruct(cast(StructNode) inode); break;
150159
case NodeType.Const: backend.CompileConst(cast(ConstNode) inode); break;
151160
case NodeType.Enum: backend.CompileEnum(cast(EnumNode) inode); break;
152-
default: assert(0);
161+
default: {
162+
backend.Error(inode.error, "Unimplemented node '%s'", inode.type);
163+
}
153164
}
154165
}
155166

source/parser.d

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@ class LetNode : Node {
197197
type = NodeType.Let;
198198
error = perror;
199199
}
200+
201+
override string toString() => array?
202+
format("let array %d %s %s", arraySize, varType, name) :
203+
format("let %s %s", varType, name);
200204
}
201205

202206
class EnableNode : Node {
@@ -206,6 +210,8 @@ class EnableNode : Node {
206210
type = NodeType.Enable;
207211
error = perror;
208212
}
213+
214+
override string toString() => format("enable %s", ver);
209215
}
210216

211217
class RequiresNode : Node {
@@ -215,6 +221,8 @@ class RequiresNode : Node {
215221
type = NodeType.Requires;
216222
error = perror;
217223
}
224+
225+
override string toString() => format("requires %s", ver);
218226
}
219227

220228
class VersionNode : Node {
@@ -225,6 +233,16 @@ class VersionNode : Node {
225233
type = NodeType.Version;
226234
error = perror;
227235
}
236+
237+
override string toString() {
238+
string ret = format("version %s\n", ver);
239+
240+
foreach (ref node ; block) {
241+
ret ~= format(" %s\n", node);
242+
}
243+
244+
return ret ~ "end";
245+
}
228246
}
229247

230248
class ArrayNode : Node {
@@ -236,6 +254,16 @@ class ArrayNode : Node {
236254
type = NodeType.Array;
237255
error = perror;
238256
}
257+
258+
override string toString() {
259+
string ret = constant? "c[" : "[";
260+
261+
foreach (ref node ; elements) {
262+
ret ~= node.toString() ~ ' ';
263+
}
264+
265+
return ret ~ ']';
266+
}
239267
}
240268

241269
class StringNode : Node {
@@ -246,6 +274,8 @@ class StringNode : Node {
246274
type = NodeType.String;
247275
error = perror;
248276
}
277+
278+
override string toString() => format("%s\"%s\"", constant? "c" : "", value);
249279
}
250280

251281
class StructNode : Node {
@@ -257,6 +287,16 @@ class StructNode : Node {
257287
type = NodeType.Struct;
258288
error = perror;
259289
}
290+
291+
override string toString() {
292+
string ret = format("struct %s\n", name);
293+
294+
foreach (i, ref name ; names) {
295+
ret ~= format("%s %s\n", types[i], name);
296+
}
297+
298+
return ret ~ "end";
299+
}
260300
}
261301

262302
class ConstNode : Node {
@@ -267,6 +307,8 @@ class ConstNode : Node {
267307
type = NodeType.Const;
268308
error = perror;
269309
}
310+
311+
override string toString() => format("const %s %d", name, value);
270312
}
271313

272314
class EnumNode : Node {

source/preprocessor.d

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ class Preprocessor {
6868
auto node = cast(VersionNode) inode;
6969

7070
if (versions.canFind(node.ver)) {
71-
ret ~= node.block;
71+
//ret ~= node.block;
72+
ret ~= Run(node.block);
7273
}
7374
break;
7475
}
@@ -80,14 +81,6 @@ class Preprocessor {
8081
}
8182
break;
8283
}
83-
case NodeType.Requires: {
84-
auto node = cast(RequiresNode) inode;
85-
86-
if (!versions.canFind(node.ver)) {
87-
Error(node.error, "Version '%s' required", node.ver);
88-
}
89-
break;
90-
}
9184
default: {
9285
ret ~= inode;
9386
}

0 commit comments

Comments
 (0)