Skip to content

Commit

Permalink
add return type support and enhance parameter parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
gvozdvmozgu committed Oct 17, 2024
1 parent 5815bf4 commit db18673
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 12 deletions.
25 changes: 22 additions & 3 deletions crates/mitki-parse/src/grammar/items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ fn item(p: &mut Parser) {
p.error("expected function parameters");
}

if p.at(COLON) {
let m = p.start();
types::ascription(p);
m.complete(p, RETURN_TYPE);
}
exprs::block(p);

m.complete(p, FN);
Expand Down Expand Up @@ -74,8 +79,23 @@ fn param_list(p: &mut Parser) {
p.advance();

while !matches!(p.peek_kind(), RIGHT_PAREN | EOF) {
if p.peek_kind() != NAME {
p.error_and_bump("expected parameter name");
if p.eat(COMMA) {
continue;
}
break;
}

param(p);
p.eat(COMMA);

if !p.eat(COMMA) {
if p.peek_kind() == NAME {
p.expect(COMMA);
} else {
break;
}
}
}

p.expect(RIGHT_PAREN);
Expand All @@ -84,14 +104,13 @@ fn param_list(p: &mut Parser) {

fn param(p: &mut Parser) {
let m = p.start();
p.advance();
name(p, &[]);

if p.at(COLON) {
types::ascription(p);
} else {
p.error("missing type for function parameter");
}

p.advance();
m.complete(p, PARAM);
}
17 changes: 8 additions & 9 deletions crates/mitki-parse/test_data/curly_in_params.ir
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,13 @@ MODULE
NAME: "foo"
PARAM_LIST
LEFT_PAREN: "("
PARAM
RIGHT_BRACE: "}"
RIGHT_PAREN: ")"
PARAM
LEFT_BRACE: "{"
RIGHT_BRACE: "}"
RIGHT_BRACE: "}"
RIGHT_PAREN: ")"
LEFT_BRACE: "{"
RIGHT_BRACE: "}"

Errors:
missing type for function parameter
missing type for function parameter
expected `)`
expected parameter name
expected item
expected item
expected item
27 changes: 27 additions & 0 deletions crates/mitki-parse/test_data/function_ret_type.ir
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
MODULE
FN
FUN_KW: "fun"
IDENT
NAME: "foo"
PARAM_LIST
LEFT_PAREN: "("
RIGHT_PAREN: ")"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"
FN
FUN_KW: "fun"
IDENT
NAME: "bar"
PARAM_LIST
LEFT_PAREN: "("
RIGHT_PAREN: ")"
RETURN_TYPE
COLON: ":"
PATH_TYPE
NAME: "u32"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"

Errors:
2 changes: 2 additions & 0 deletions crates/mitki-parse/test_data/function_ret_type.mitki
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
fun foo() {}
fun bar(): u32 {}
35 changes: 35 additions & 0 deletions crates/mitki-parse/test_data/missing_fn_param_type.ir
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
MODULE
FN
FUN_KW: "fun"
IDENT
NAME: "f"
PARAM_LIST
LEFT_PAREN: "("
PARAM
IDENT
NAME: "x"
PARAM
IDENT
NAME: "y"
COLON: ":"
PATH_TYPE
NAME: "i32"
COMMA: ","
PARAM
IDENT
NAME: "z"
COMMA: ","
PARAM
IDENT
NAME: "t"
COLON: ":"
PATH_TYPE
NAME: "i32"
RIGHT_PAREN: ")"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"

Errors:
missing type for function parameter
missing type for function parameter
1 change: 1 addition & 0 deletions crates/mitki-parse/test_data/missing_fn_param_type.mitki
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fun f(x y: i32, z, t: i32) {}
46 changes: 46 additions & 0 deletions crates/mitki-parse/test_data/param_list.ir
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
MODULE
FN
FUN_KW: "fun"
IDENT
NAME: "a"
PARAM_LIST
LEFT_PAREN: "("
RIGHT_PAREN: ")"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"
FN
FUN_KW: "fun"
IDENT
NAME: "b"
PARAM_LIST
LEFT_PAREN: "("
PARAM
IDENT
NAME: "x"
COLON: ":"
PATH_TYPE
NAME: "i32"
RIGHT_PAREN: ")"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"
FN
FUN_KW: "fun"
IDENT
NAME: "c"
PARAM_LIST
LEFT_PAREN: "("
PARAM
IDENT
NAME: "x"
COLON: ":"
PATH_TYPE
NAME: "i32"
COMMA: ","
RIGHT_PAREN: ")"
STMT_LIST
LEFT_BRACE: "{"
RIGHT_BRACE: "}"

Errors:
3 changes: 3 additions & 0 deletions crates/mitki-parse/test_data/param_list.mitki
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fun a() {}
fun b(x: i32) {}
fun c(x: i32, ) {}
1 change: 1 addition & 0 deletions crates/mitki-yellow/src/syntax_kind.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ pub enum SyntaxKind {
EXPR_STMT,
FIELD_EXPR,
FN,
RETURN_TYPE,
IDENT,
TYPE_PARAM,
LITERAL,
Expand Down

0 comments on commit db18673

Please sign in to comment.