Rewriting function calls to have named parameters, default values
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user