Browse Source

Fix len of type bug

gingerBill 5 years ago
parent
commit
11c7b6a2e4
2 changed files with 7 additions and 2 deletions
  1. 3 0
      src/check_expr.cpp
  2. 4 2
      src/ir.cpp

+ 3 - 0
src/check_expr.cpp

@@ -4021,6 +4021,9 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32
 				mode = Addressing_Value;
 				mode = Addressing_Value;
 			}
 			}
 		}
 		}
+		if (operand->mode == Addressing_Type && mode != Addressing_Constant) {
+			mode = Addressing_Invalid;
+		}
 
 
 		if (mode == Addressing_Invalid) {
 		if (mode == Addressing_Invalid) {
 			gbString t = type_to_string(operand->type);
 			gbString t = type_to_string(operand->type);

+ 4 - 2
src/ir.cpp

@@ -6231,6 +6231,7 @@ irValue *ir_gen_anonymous_proc_lit(irModule *m, String prefix_name, Ast *expr, i
 	String name = make_string(name_text, name_len-1);
 	String name = make_string(name_text, name_len-1);
 
 
 	Type *type = type_of_expr(expr);
 	Type *type = type_of_expr(expr);
+	set_procedure_abi_types(heap_allocator(), type);
 	irValue *value = ir_value_procedure(m, nullptr, type, pl->type, pl->body, name);
 	irValue *value = ir_value_procedure(m, nullptr, type, pl->type, pl->body, name);
 
 
 	value->Proc.tags = pl->tags;
 	value->Proc.tags = pl->tags;
@@ -8934,7 +8935,7 @@ void ir_build_nested_proc(irProcedure *proc, AstProcLit *pd, Entity *e) {
 	name_len = gb_snprintf(cast(char *)name_text, name_len, "%.*s.%.*s-%d", LIT(proc->name), LIT(pd_name), guid);
 	name_len = gb_snprintf(cast(char *)name_text, name_len, "%.*s.%.*s-%d", LIT(proc->name), LIT(pd_name), guid);
 	String name = make_string(name_text, name_len-1);
 	String name = make_string(name_text, name_len-1);
 
 
-
+	set_procedure_abi_types(heap_allocator(), e->type);
 	irValue *value = ir_value_procedure(proc->module, e, e->type, pd->type, pd->body, name);
 	irValue *value = ir_value_procedure(proc->module, e, e->type, pd->type, pd->body, name);
 
 
 	value->Proc.tags = pd->tags;
 	value->Proc.tags = pd->tags;
@@ -9033,7 +9034,7 @@ void ir_build_constant_value_decl(irProcedure *proc, AstValueDecl *vd) {
 					return;
 					return;
 				}
 				}
 
 
-
+				set_procedure_abi_types(heap_allocator(), e->type);
 				irValue *value = ir_value_procedure(proc->module, e, e->type, pl->type, pl->body, name);
 				irValue *value = ir_value_procedure(proc->module, e, e->type, pl->type, pl->body, name);
 
 
 				value->Proc.tags = pl->tags;
 				value->Proc.tags = pl->tags;
@@ -11840,6 +11841,7 @@ void ir_gen_tree(irGen *s) {
 
 
 			Ast *type_expr = pl->type;
 			Ast *type_expr = pl->type;
 
 
+			set_procedure_abi_types(heap_allocator(), e->type);
 			irValue *p = ir_value_procedure(m, e, e->type, type_expr, body, name);
 			irValue *p = ir_value_procedure(m, e, e->type, type_expr, body, name);
 			p->Proc.tags = pl->tags;
 			p->Proc.tags = pl->tags;
 			p->Proc.inlining = pl->inlining;
 			p->Proc.inlining = pl->inlining;