Rewriting function calls to have named parameters, default values

This commit is contained in:
Krzosa Karol
2022-05-30 11:00:30 +02:00
parent 54e3cb5261
commit 9e24a608cb
7 changed files with 129 additions and 32 deletions

View File

@@ -167,6 +167,12 @@ parse_expr_call(Ast_Expr *left){
}
Ast_Expr *item = parse_expr();
if(!index && token_match(TK_Assign)){
assert(is_flag_set(item->flags, AST_ATOM));
name = (Ast_Atom *)item;
item = parse_expr();
}
Ast_Call_Item *item_comp = ast_call_item(token, index, name, item);
exprs.add(item_comp);
@@ -252,15 +258,21 @@ parse_block(){
function Ast_Lambda *
parse_lambda(Token *token, B32 is_typespec = false){
Scratch scratch;
Array<Ast_Lambda_Arg *> params = {scratch};
if(!token_is(TK_CloseParen)){
for(;;){
Token *name = token_expect(TK_Identifier);
token_expect(TK_Colon);
Ast_Expr *typespec = parse_expr();
Ast_Lambda_Arg *param = ast_expr_lambda_arg(name, name->intern_val, typespec);
params.add(param);
Ast_Expr *default_value = 0;
if(token_match(TK_Assign)) {
default_value = parse_expr();
}
Ast_Lambda_Arg *param = ast_expr_lambda_arg(name, name->intern_val, typespec, default_value);
params.add(param);
if(!token_match(TK_Comma)){
break;
}