diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-08-13 22:09:26 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-08-13 22:09:26 +0100 |
| commit | 01519f2fd5dc7551291c2e54d5e9b1d4c97df92f (patch) | |
| tree | 1fa5174e72a9caffeaa4e59fbb58b026057861f6 /src | |
| parent | 33aad3a8cec6aec8b6041c20ee661b4b8a451333 (diff) | |
Fix `push_allocator`
Diffstat (limited to 'src')
| -rw-r--r-- | src/check_stmt.cpp | 4 | ||||
| -rw-r--r-- | src/ir.cpp | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 8d74c4f17..8c7586a12 100644 --- a/src/check_stmt.cpp +++ b/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; diff --git a/src/ir.cpp b/src/ir.cpp index 93888588f..c777280bd 100644 --- a/src/ir.cpp +++ b/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); |