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