From 10cad2ab74fe2bb9b36edf72a1d58253b39bdaa2 Mon Sep 17 00:00:00 2001 From: Nathan Braswell Date: Fri, 16 Mar 2018 01:31:03 -0400 Subject: [PATCH] Passing as param works too --- stdlib/bytecode_generator.krak | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/stdlib/bytecode_generator.krak b/stdlib/bytecode_generator.krak index 284ab05..9f1dcf8 100644 --- a/stdlib/bytecode_generator.krak +++ b/stdlib/bytecode_generator.krak @@ -644,10 +644,15 @@ obj bytecode_generator (Object) { var total_param_size = 0 node->function_call.parameters.reverse().for_each(fun(child: *ast_node) { // push param onto stack - var param_size = type_size(get_ast_type(child)) + var param_type = get_ast_type(child) + var param_size = type_size(param_type) + var param_reg = generate(child) emit_addi(0, 0, -param_size) total_param_size += param_size - emit_str(0, 0, generate(child), size_to_operand_size(param_size)) + if (param_type->is_object() && param_type->indirection == 0) + emit_struct_copy(0, 0, param_reg, 0, param_type) + else + emit_str(0, 0, param_reg, size_to_operand_size(param_size)) reset_reg(save_til) }) var return_reg = emit_call(generate_function(node->function_call.func))