diff options
author | Bad Diode <bd@badd10de.dev> | 2021-10-27 14:22:19 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-10-27 14:22:19 +0200 |
commit | 9460f325d22fac3962a3452ce25a24b04d22e665 (patch) | |
tree | 836a3a6c4cb4b1f6403119983e29383637f6babb /src/bytecode/vm.h | |
parent | ad659dca44892a5f2ba4e088603a819af58a5819 (diff) | |
download | bdl-9460f325d22fac3962a3452ce25a24b04d22e665.tar.gz bdl-9460f325d22fac3962a3452ce25a24b04d22e665.zip |
Fix function call bug with number of locals
Diffstat (limited to 'src/bytecode/vm.h')
-rwxr-xr-x | src/bytecode/vm.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/bytecode/vm.h b/src/bytecode/vm.h index 287c83c..15a6b86 100755 --- a/src/bytecode/vm.h +++ b/src/bytecode/vm.h | |||
@@ -288,7 +288,7 @@ vm_interpret(VM *vm) { | |||
288 | // NOTE: This is probably better handled at compilation, but for | 288 | // NOTE: This is probably better handled at compilation, but for |
289 | // now this is simpler to implement. | 289 | // now this is simpler to implement. |
290 | ssize_t n_params = proc.chunk->n_params; | 290 | ssize_t n_params = proc.chunk->n_params; |
291 | ssize_t n_locals = proc.chunk->n_locals; | 291 | ssize_t n_locals = proc.chunk->n_locals - n_params; |
292 | if (n_args < n_params) { | 292 | if (n_args < n_params) { |
293 | RUNTIME_ERROR(ERR_NOT_ENOUGH_ARGS); | 293 | RUNTIME_ERROR(ERR_NOT_ENOUGH_ARGS); |
294 | } else if (n_args > n_params) { | 294 | } else if (n_args > n_params) { |
@@ -317,7 +317,8 @@ vm_interpret(VM *vm) { | |||
317 | } else { | 317 | } else { |
318 | // Bind tail-call parameters. | 318 | // Bind tail-call parameters. |
319 | for (ssize_t i = 0; i < n_params; i++) { | 319 | for (ssize_t i = 0; i < n_params; i++) { |
320 | Object obj = array_peek(vm->stack, n_locals + n_params - 1 - i); | 320 | size_t offset = n_locals + n_params - 1 - i; |
321 | Object obj = array_peek(vm->stack, offset); | ||
321 | vm->stack[frame->stack_offset + i] = obj; | 322 | vm->stack[frame->stack_offset + i] = obj; |
322 | } | 323 | } |
323 | 324 | ||