Slowly adding multiple return values
This commit is contained in:
23
parsing.cpp
23
parsing.cpp
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user