Skip to content

Commit c3f5ce5

Browse files
Allow fields in array initializers so that size and initial value can be set.
1 parent b3701a8 commit c3f5ce5

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

antlr-parser/examples/all-features.lang

+11-3
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,20 @@ func foo(a: Int, b: [Int]) {
1919
}
2020
}
2121
func bar() -> Test {
22-
var v = new Test { intArray = new [Tree] {} }
22+
var v = new Test { intArray = new [Tree] { new Tree{left=null,right=null} } }
2323
return v
2424
}
2525
func main() {
2626
var m = 42
27+
var j: Int
2728
var t: Tree
28-
var b = true
29-
var c: Bool
29+
var array = new [Int] {size=10,1,2,3}
30+
array[1] = 42
31+
t.left = null
32+
if (m < 1)
33+
print(1)
34+
else if (m == 5)
35+
print(2)
36+
else
37+
print(3)
3038
}

parser/src/main/java/com/compilerprogramming/ezlang/parser/Parser.java

-5
Original file line numberDiff line numberDiff line change
@@ -334,22 +334,17 @@ private AST.Expr parseNew(Lexer lexer) {
334334
AST.TypeExpr resultType = parseTypeExpr(lexer);
335335
var newExpr = new AST.NewExpr(resultType);
336336
List<AST.Expr> initExpr = new ArrayList<>();
337-
int initType = 0;
338337
int index = 0;
339338
if (testPunctuation(lexer, "{")) {
340339
while (!isToken(currentToken, "}")) {
341340
if (currentToken.kind == Token.Kind.IDENT && lexer.peekChar() == '=') {
342-
if (initType == 0) initType = 1;
343-
else if (initType != 1) throw new CompilerException("Cannot mix initializer expressions");
344341
String fieldname = currentToken.str;
345342
nextToken(lexer);
346343
matchPunctuation(lexer, "=");
347344
AST.Expr value = parseBool(lexer);
348345
initExpr.add(new AST.InitFieldExpr(newExpr, fieldname, value));
349346
}
350347
else {
351-
if (initType == 0) initType = 2;
352-
else if (initType != 2) throw new CompilerException("Cannot mix initializer expressions");
353348
var indexLit = Integer.valueOf(index++);
354349
var indexExpr = new AST.LiteralExpr(Token.newNum(indexLit,indexLit.toString(),0));
355350
initExpr.add(new AST.ArrayInitExpr(newExpr, indexExpr, parseBool(lexer)));

parser/src/test/java/com/compilerprogramming/ezlang/parser/TestParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func bar() -> Test {
3636
func main() {
3737
var m = 42
3838
var t: Tree
39-
var array = new [Int] {1,2,3}
39+
var array = new [Int] {size=10,1,2,3}
4040
array[1] = 42
4141
t.left = null
4242
if (m < 1)

0 commit comments

Comments
 (0)