[njs] Fixed vmcode function call.

Dmitry Volyntsev xeioex at nginx.com
Wed Jan 9 15:22:43 UTC 2019


details:   https://hg.nginx.org/njs/rev/d0ba2a63eb5a
branches:  
changeset: 714:d0ba2a63eb5a
user:      hongzhidao <hongzhidao at gmail.com>
date:      Mon Jan 07 17:40:48 2019 +0800
description:
Fixed vmcode function call.

This closes #82 issue on Github.

diffstat:

 njs/njs_vm.c             |  10 ++++++++--
 njs/test/njs_unit_test.c |   3 +++
 2 files changed, 11 insertions(+), 2 deletions(-)

diffs (33 lines):

diff -r fd135f1b18bb -r d0ba2a63eb5a njs/njs_vm.c
--- a/njs/njs_vm.c	Wed Jan 09 18:21:31 2019 +0300
+++ b/njs/njs_vm.c	Mon Jan 07 17:40:48 2019 +0800
@@ -2086,8 +2086,14 @@ njs_vmcode_function_call(njs_vm_t *vm, n
          * 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 -r fd135f1b18bb -r d0ba2a63eb5a njs/test/njs_unit_test.c
--- a/njs/test/njs_unit_test.c	Wed Jan 09 18:21:31 2019 +0300
+++ b/njs/test/njs_unit_test.c	Mon Jan 07 17:40:48 2019 +0800
@@ -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") },
 


More information about the nginx-devel mailing list