aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp26
1 files changed, 13 insertions, 13 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 17b02ffbc..0ea5ade77 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -5012,6 +5012,8 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
Entity *e = pt->variables[i];
if (e->kind == Entity_TypeName) {
args[i] = ir_value_nil(proc->module->allocator, e->type);
+ } else if (e->kind == Entity_Constant) {
+ continue;
} else {
GB_ASSERT(e->kind == Entity_Variable);
if (args[i] == nullptr) {
@@ -5029,8 +5031,6 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
return ir_emit_call(proc, value, args, param_count);
}
- isize arg_index = 0;
-
isize arg_count = 0;
for_array(i, ce->args) {
AstNode *a = ce->args[i];
@@ -5042,8 +5042,8 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
}
}
-
- irValue **args = gb_alloc_array(proc->module->allocator, irValue *, gb_max(type->param_count, arg_count));
+ Array<irValue *> args = {};
+ array_init(&args, proc->module->allocator, gb_max(type->param_count, arg_count));
bool variadic = type->variadic;
bool vari_expand = ce->ellipsis.pos.line != 0;
bool is_c_vararg = type->c_vararg;
@@ -5052,7 +5052,7 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
AstNode *arg = ce->args[i];
TypeAndValue arg_tv = type_and_value_of_expr(proc->module->info, arg);
if (arg_tv.mode == Addressing_Type) {
- args[arg_index++] = ir_value_nil(proc->module->allocator, arg_tv.type);
+ array_add(&args, ir_value_nil(proc->module->allocator, arg_tv.type));
} else {
irValue *a = ir_build_expr(proc, arg);
Type *at = ir_type(a);
@@ -5060,10 +5060,10 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
for_array(i, at->Tuple.variables) {
Entity *e = at->Tuple.variables[i];
irValue *v = ir_emit_struct_ev(proc, a, cast(i32)i);
- args[arg_index++] = v;
+ array_add(&args, v);
}
} else {
- args[arg_index++] = a;
+ array_add(&args, a);
}
}
}
@@ -5081,15 +5081,15 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
if (variadic) {
end--;
}
- while (arg_index < end) {
- Entity *e = pt->variables[arg_index];
+ while (args.count < end) {
+ Entity *e = pt->variables[args.count];
GB_ASSERT(e->kind == Entity_Variable);
if (e->Variable.default_value.kind != ExactValue_Invalid) {
- args[arg_index++] = ir_value_constant(proc->module->allocator, e->type, e->Variable.default_value);
+ array_add(&args, ir_value_constant(proc->module->allocator, e->type, e->Variable.default_value));
} else if (e->Variable.default_is_location) {
- args[arg_index++] = ir_emit_source_code_location(proc, procedure, pos);
+ array_add(&args, ir_emit_source_code_location(proc, procedure, pos));
} else {
- args[arg_index++] = ir_value_nil(proc->module->allocator, e->type);
+ array_add(&args, ir_value_nil(proc->module->allocator, e->type));
}
}
}
@@ -5172,7 +5172,7 @@ irValue *ir_build_expr(irProcedure *proc, AstNode *expr) {
args[arg_count-1] = ir_emit_load(proc, slice);
}
- return ir_emit_call(proc, value, args, final_count);
+ return ir_emit_call(proc, value, args.data, final_count);
case_end;
case_ast_node(se, SliceExpr, expr);