Skip to content

Commit 850064e

Browse files
Merge pull request #2 from Glimmr-Lang/work
Pr from Work
2 parents 9e960a8 + fed5243 commit 850064e

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

src/main/antlr4/PiccodeScript.g4

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,15 @@ func_args: '(' arg_list? ')' ;
4646

4747
arg_list: arg (',' arg)* ;
4848

49-
arg: ID (ASSIGN literal_expr)? ; // only allow literals in default values
50-
51-
52-
literal_expr :
53-
NUMBER
54-
| STRING
55-
|array
56-
| tuple
57-
| object
58-
;
49+
arg: (USE?) ID (ASSIGN expr)? ; // only allow literals in default values
5950

6051
expr_stmt: expr;
6152
// parser rules
6253
expr
63-
: expr CC expr
64-
| expr LPAREN call_expr_list? RPAREN
54+
: expr LPAREN call_expr_list? RPAREN
6555
| var_decl
6656
| closure_decl
57+
| expr CC expr
6758
| expr DOT expr
6859
| expr MUL expr
6960
| expr DIV expr
@@ -86,9 +77,9 @@ expr
8677
| expr BAND expr
8778
| expr COLON expr
8879
| LPAREN expr? RPAREN
89-
| unary
9080
| if_expr
9181
| when_expr
82+
| unary
9283
| do_expr
9384
| array
9485
| tuple
@@ -102,12 +93,12 @@ closure_decl: BOR arg_list? BOR ARROW expr;
10293
unary:
10394
EXCLAIM expr
10495
| SUB expr
105-
| RETURN expr
96+
| RETURN_TOK expr
10697
| TILDE expr
10798
| BAND expr;
10899

109100
if_expr:
110-
IF expr LBRACE expr RBRACE (ELSE LBRACE expr RBRACE)?;
101+
IF expr expr (ELSE expr)?;
111102

112103
when_expr:
113104
WHEN expr LBRACE when_cases else_case? RBRACE;
@@ -182,6 +173,8 @@ IF: 'if';
182173
ELSE: 'else';
183174
MODULE: 'module';
184175
DO: 'do';
176+
USE: 'use';
177+
RETURN_TOK: 'return';
185178

186179
NUMBER
187180
: HEX_LITERAL

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)