Slowly adding multiple return values

This commit is contained in:
Krzosa Karol
2022-06-16 11:48:47 +02:00
parent 2a3284f70e
commit c604b44458
8 changed files with 122 additions and 48 deletions

View File

@@ -214,9 +214,15 @@ parse_stmt_scope(Ast_Scope *scope_defined_outside = 0){
if(!scope_defined_outside) scope = begin_stmt_scope(scratch, token_block);
do{
Token *token = token_get();
if(token_match_keyword(keyword_return)){
Ast_Expr *expr = 0;
if(!token_is_scope()) expr = parse_expr();
Array<Ast_Expr *> expr = {scratch};
if(!token_is_scope()) {
do{
Ast_Expr *subexpr = parse_expr();
expr.add(subexpr);
} while(token_match(TK_Comma));
}
scope->stmts.add(ast_return(token, expr));
}
@@ -323,7 +329,7 @@ parse_stmt_scope(Ast_Scope *scope_defined_outside = 0){
decls.add(decl);
}while(token_match(TK_Comma));
token_expect(TK_Assign);
token_expect(TK_ColonAssign);
Ast_Expr *expr = parse_expr();
Ast_Var_Unpack *vars = ast_var_unpack(token, decls, expr);
scope->stmts.add(vars);
@@ -384,7 +390,16 @@ parse_lambda(Token *token){
}
}
token_expect(TK_CloseParen);
Ast_Expr *ret = parse_optional_type();
Array<Ast_Expr *> ret = {scratch};
if(token_match(TK_Colon)){
do{
Ast_Expr *typespec = parse_expr();
ret.add(typespec);
}while(token_match(TK_Comma));
}
else ret.add(ast_ident(token, intern_void));
Ast_Scope *scope = token_is(OPEN_SCOPE) ? parse_stmt_scope() : 0;
Ast_Lambda *result = ast_lambda(token, params, ret, scope);
return result;