aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorlachsinc <lachlansinclair@gmail.com>2018-10-05 12:57:06 +1000
committerlachsinc <lachlansinclair@gmail.com>2018-10-05 12:57:06 +1000
commit99b4d59f44842327eaee08886a7aa0cbd538588d (patch)
treea2a032aeba32fa98d370b970253b111594e32787 /src/ir.cpp
parentdfeefc51799372307036ea9520261ee0d6059dc1 (diff)
Add arg # for proc param locals.
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 956959141..266b94e05 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -1418,7 +1418,7 @@ void ir_push_context_onto_stack(irProcedure *proc, irValue *ctx) {
array_add(&proc->context_stack, cd);
}
-irValue *ir_add_local(irProcedure *proc, Entity *e, Ast *expr, bool zero_initialized) {
+irValue *ir_add_local(irProcedure *proc, Entity *e, Ast *expr, bool zero_initialized, i32 param_index = 0) {
irBlock *b = proc->decl_block; // all variables must be in the first block
irValue *instr = ir_instr_local(proc, e, true);
instr->Instr.block = b;
@@ -1436,7 +1436,7 @@ irValue *ir_add_local(irProcedure *proc, Entity *e, Ast *expr, bool zero_initial
ir_emit(proc, ir_instr_debug_declare(proc, expr, e, true, instr));
// TODO(lachsinc): "Arg" is not used yet but should be eventually, if applicable, set to param index.
- ir_add_debug_info_local(proc, e, 0);
+ ir_add_debug_info_local(proc, e, param_index);
}
return instr;
@@ -1501,7 +1501,7 @@ irValue *ir_add_global_generated(irModule *m, Type *type, irValue *value) {
}
-irValue *ir_add_param(irProcedure *proc, Entity *e, Ast *expr, Type *abi_type) {
+irValue *ir_add_param(irProcedure *proc, Entity *e, Ast *expr, Type *abi_type, i32 index) {
irValue *v = ir_value_param(proc, e, abi_type);
irValueParam *p = &v->Param;
@@ -1510,7 +1510,7 @@ irValue *ir_add_param(irProcedure *proc, Entity *e, Ast *expr, Type *abi_type) {
switch (p->kind) {
case irParamPass_Value: {
- irValue *l = ir_add_local(proc, e, expr, false);
+ irValue *l = ir_add_local(proc, e, expr, false, index);
irValue *x = v;
if (abi_type == t_llvm_bool) {
x = ir_emit_conv(proc, x, t_bool);
@@ -1523,7 +1523,7 @@ irValue *ir_add_param(irProcedure *proc, Entity *e, Ast *expr, Type *abi_type) {
return ir_emit_load(proc, v);
case irParamPass_Integer: {
- irValue *l = ir_add_local(proc, e, expr, false);
+ irValue *l = ir_add_local(proc, e, expr, false, index);
irValue *iptr = ir_emit_conv(proc, l, alloc_type_pointer(p->type));
ir_emit_store(proc, iptr, v);
return ir_emit_load(proc, l);
@@ -8336,7 +8336,7 @@ void ir_begin_procedure_body(irProcedure *proc) {
Type *abi_type = proc->type->Proc.abi_compat_params[i];
if (e->token.string != "" && !is_blank_ident(e->token)) {
- irValue *param = ir_add_param(proc, e, name, abi_type);
+ irValue *param = ir_add_param(proc, e, name, abi_type, cast(i32)(i+1));
array_add(&proc->params, param);
}
}
@@ -8353,7 +8353,7 @@ void ir_begin_procedure_body(irProcedure *proc) {
abi_type = abi_types[i];
}
if (e->token.string != "" && !is_blank_ident(e->token)) {
- irValue *param = ir_add_param(proc, e, nullptr, abi_type);
+ irValue *param = ir_add_param(proc, e, nullptr, abi_type, cast(i32)(i+1));
array_add(&proc->params, param);
}
}