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

@@ -213,7 +213,10 @@ gen_lambda(Intern_String name, Ast_Lambda *lambda, B32 generate_block = true){
if(name == pctx->intern("main"_s) || name == pctx->intern("WinMain"_s)){
is_foreign = true;
}
gen_simple_decl(lambda->resolved_type->func.ret, name, lambda->parent_scope, !is_foreign);
if(lambda->resolved_type->func.ret->kind == TYPE_TUPLE){
gen("TUPLE ");
}
else gen_simple_decl(lambda->resolved_type->func.ret, name, lambda->parent_scope, !is_foreign);
gen("(");
For(lambda->args){
gen_var(it, DONT_EMIT_VALUE, true);
@@ -379,9 +382,9 @@ gen_ast(Ast *ast){
CASE(RETURN, Return){
gen("return");
if(node->expr){
For(node->expr){
gen(" ");
gen_expr(node->expr);
gen_expr(it); // @todo multiple_returns
}
gen(";");
BREAK();
@@ -524,6 +527,15 @@ gen_ast(Ast *ast){
BREAK();
}
CASE(VAR_UNPACK, Var_Unpack){
For(node->vars) {
gen_ast(it);
}
gen(" = ");
gen_expr(node->expr);
BREAK();
}
case AST_CONSTANT_ASSERT:
case AST_MODULE_NAMESPACE:
CASE(FILE_NAMESPACE, File_Namespace){unused(node); BREAK();}
@@ -707,6 +719,7 @@ typedef struct String{
#define assert_msg(x,...) assert(x)
)==");
//*(volatile int *)0 = 0;
#endif
For(pctx->ordered_decls){
if(it->kind == AST_STRUCT){