Fix return type checking bug due to tuples potentially having untyped types. Also working on down typing untyped.
This commit is contained in:
@@ -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("// ");
|
||||
|
||||
Reference in New Issue
Block a user