aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/check_stmt.cpp4
-rw-r--r--src/ir.cpp4
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);