Skip to content

Commit 68021d1

Browse files
committed
antlr4: Managed to fix the bugs
1 parent 19bd594 commit 68021d1

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

src/main/java/org/piccode/ast/PiccodeVisitor.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,15 @@ private Ast visitUnaryExpr(UnaryContext ctx) {
523523
return result;
524524
}
525525

526+
527+
if (ctx.RETURN_TOK() != null) {
528+
var tok = ctx.RETURN_TOK().getSymbol();
529+
var result = finalizeAstNode(
530+
new ReturnAst(visitExpr(ctx.expr())),
531+
tok);
532+
return result;
533+
}
534+
526535
var start = ctx.getStart();
527536
var err = new PiccodeException(fileName, start.getLine(), start.getCharPositionInLine(), "Invalid unary expression");
528537
err.frame = null;
@@ -587,7 +596,20 @@ public Ast visitObject(ObjectContext ctx) {
587596
private HashMap<String, Ast> visitKeyValuePairs(Key_val_pairsContext key_val_pairs) {
588597
var obj = new HashMap<String, Ast>();
589598
for (var kv : key_val_pairs.key_val_pair()) {
590-
obj.put(kv.ID().getText(), visitExpr(kv.expr()));
599+
var id = kv.ID();
600+
if (id == null) {
601+
var tok = key_val_pairs.getStart();
602+
throw new PiccodeException(fileName, tok.getLine(), tok.getCharPositionInLine(), "Missing a key in object literal");
603+
}
604+
605+
var expr = kv.expr();
606+
607+
if (expr == null) {
608+
var tok = key_val_pairs.getStart();
609+
throw new PiccodeException(fileName, tok.getLine(), tok.getCharPositionInLine(), "Missing expression in object literal");
610+
}
611+
612+
obj.put(id.getText(), visitExpr(expr));
591613
}
592614
return obj;
593615
}

0 commit comments

Comments
 (0)