From 3c3bab89c17664e55b8f2f2e610e0d6c46dd55be Mon Sep 17 00:00:00 2001 From: hongzhidao Date: Mon, 7 Jan 2019 17:40:48 +0800 Subject: [PATCH] Fixed vmcode function call. This closes #82 issue on Github. --- njs/njs_vm.c | 10 ++++++++-- njs/test/njs_unit_test.c | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/njs/njs_vm.c b/njs/njs_vm.c index 4d8e46bd..da327e19 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -2086,8 +2086,14 @@ njs_vmcode_function_call(njs_vm_t *vm, njs_value_t *invld, njs_value_t *retval) * If a retval is in a callee arguments scope it * must be in the previous callee arguments scope. */ - vm->scopes[NJS_SCOPE_CALLEE_ARGUMENTS] = - vm->top_frame->arguments + function->args_offset; + args = vm->top_frame->arguments; + function = vm->top_frame->function; + + if (function != NULL) { + args += function->args_offset; + } + + vm->scopes[NJS_SCOPE_CALLEE_ARGUMENTS] = args; retval = njs_vmcode_operand(vm, retval); /* diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index fdc5aadb..d76e85dc 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -4017,6 +4017,9 @@ static njs_unit_test_t njs_test[] = { nxt_string("var f = ''.concat.bind(0, 1, 2, 3, 4); f(5, 6, 7, 8, 9)"), nxt_string("0123456789") }, + { nxt_string("var f = ''.concat.bind(0, 1, 2, 3, 4); f(Math.sqrt(25))"), + nxt_string("012345") }, + { nxt_string("var f = String.prototype.concat.bind(0, 1); f(2)"), nxt_string("012") }, -- 2.47.3