From: hongzhidao Date: Mon, 7 Jan 2019 09:40:48 +0000 (+0800) Subject: Fixed vmcode function call. X-Git-Tag: 0.2.8~88 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=3c3bab89c17664e55b8f2f2e610e0d6c46dd55be;p=njs.git Fixed vmcode function call. This closes #82 issue on Github. --- 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") },