Browse Source

Fix `push_allocator`

Ginger Bill 8 years ago
parent
commit
01519f2fd5
2 changed files with 6 additions and 2 deletions
  1. 3 1
      src/check_stmt.cpp
  2. 3 1
      src/ir.cpp

+ 3 - 1
src/check_stmt.cpp

@@ -1073,6 +1073,7 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) {
 					goto skip_expr;
 				}
 			} else if (operand.mode != Addressing_Invalid) {
+				bool is_ptr = is_type_pointer(operand.type);
 				Type *t = base_type(type_deref(operand.type));
 				switch (t->kind) {
 				case Type_Basic:
@@ -1138,7 +1139,8 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) {
 					found = current_scope_lookup_entity(c->context.scope, str);
 				}
 				if (found == nullptr) {
-					entity = make_entity_variable(c->allocator, c->context.scope, token, type, true);
+					bool is_immutable = true;
+					entity = make_entity_variable(c->allocator, c->context.scope, token, type, is_immutable);
 					add_entity_definition(&c->info, name, entity);
 				} else {
 					TokenPos pos = found->token.pos;

+ 3 - 1
src/ir.cpp

@@ -7065,7 +7065,9 @@ void ir_build_stmt_internal(irProcedure *proc, AstNode *node) {
 		array_add(&proc->context_stack, next);
 		defer (array_pop(&proc->context_stack));
 
-		irValue *gep = ir_emit_struct_ep(proc, next, 1);
+		// TODO(bill): is this too leaky?
+		Selection sel = lookup_field(proc->module->allocator, t_context, str_lit("allocator"), false);
+		irValue *gep = ir_emit_deep_field_gep(proc, next, sel);
 		ir_emit_store(proc, gep, ir_build_expr(proc, pa->expr));
 
 		ir_build_stmt(proc, pa->body);