Fix return type checking bug due to tuples potentially having untyped types. Also working on down typing untyped.

This commit is contained in:
Krzosa Karol
2022-06-22 11:18:00 +02:00
parent de159fc7d9
commit 40557b083b
2 changed files with 42 additions and 15 deletions

View File

@@ -154,7 +154,9 @@ gen_string_simple_decl(Allocator *a, Ast_Type *ast, String name){
}
function B32
gen_value(Value a){
gen_value(Token *pos, Value a){
if(is_untyped(a.type)) compiler_error(pos, "Internal compiler error: Untyped got propagated to the codegen stage");
B32 result = true;
if(is_enum(a.type))
goto integer;
@@ -275,12 +277,12 @@ gen_expr(Ast_Expr *ast, Ast_Type *type_of_var){
CASE(VALUE, Atom){
if(is_any(type_of_var)){
gen("(Any){&");
gen("("); gen_simple_decl(node->type); gen("){"); gen_value(node->value); gen("}");
gen("("); gen_simple_decl(node->type); gen("){"); gen_value(node->pos, node->value); gen("}");
gen(", %d}", node->type->type_id);
return true;
}
B32 written = gen_value(node->value);
B32 written = gen_value(node->pos, node->value);
if(!written) {
gen("%Q", node->value.intern_val);
}
@@ -586,7 +588,7 @@ gen_ast(Ast *ast){
For(node->scope->decls){
genln("%Q", it->name);
gen(" = ");
gen_value(it->value);
gen_value(it->pos, it->value);
gen(",");
}
global_indent--;
@@ -598,20 +600,20 @@ gen_ast(Ast *ast){
switch(node->type->kind){
CASE_FLOAT:{
gen("// F64 %Q = ", node->name);
gen_value(node->value);
// gen_value(node->pos, node->value);
} break;
CASE_INT:{
gen("// constant int %Q = ", node->name);
gen_value(node->value);
// gen_value(node->pos, node->value);
}break;
CASE_STRING:{
assert(is_pointer(node->type) ? node->type == type_pointer_to_char : 1);
gen("// const String %Q = ", node->name);
gen_value(node->value);
// gen_value(node->pos, node->value);
}break;
CASE_BOOL:{
gen("// const Bool %Q = ", node->name);
gen_value(node->value);
// gen_value(node->pos, node->value);
}break;
case TYPE_LAMBDA:{
gen("// ");