]> git.kaiwu.me - njs.git/commitdiff
Fixed native frame arguments number.
authorhongzhidao <hongzhidao@gmail.com>
Mon, 18 Mar 2019 13:05:27 +0000 (16:05 +0300)
committerhongzhidao <hongzhidao@gmail.com>
Mon, 18 Mar 2019 13:05:27 +0000 (16:05 +0300)
njs/njs_function.c
njs/test/njs_unit_test.c

index 09e4a9b3ac48394e82b0a83d2fc4aa43250874b1..afc8422fb0dfb50c762885f2fe5c0c7d1e802f32 100644 (file)
@@ -310,6 +310,7 @@ njs_function_lambda_frame(njs_vm_t *vm, njs_function_t *function,
 
     } else {
         n = function->args_offset;
+        native_frame->nargs += n - 1;
 
         do {
             *value++ = *bound++;
index 3201284641da972a993d637bda34c1d7e4fa1629..135bb709b2618d14fa1873d68a53a98f85bf3261 100644 (file)
@@ -6306,6 +6306,14 @@ static njs_unit_test_t  njs_test[] =
                  "var b = f.bind('1', '2', '3'); b.apply()"),
       nxt_string("123") },
 
+    { nxt_string("var obj = {prop:'abc'}; "
+                 "var func = function(x) { "
+                 "    return this === obj && x === 1 && arguments[0] === 1 "
+                 "           && arguments.length === 1 && this.prop === 'abc';"
+                 "};"
+                 "Function.prototype.bind.call(func, obj, 1)()"),
+      nxt_string("true") },
+
     { nxt_string("function F(a, b) { this.a = a + b }"
                  "var o = new F(1, 2);"
                  "o.a"),
@@ -6457,6 +6465,9 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("(function(){arguments.length = 1; return arguments.length;})(1,2,3)"),
       nxt_string("1") },
 
+     { nxt_string("(function(){return arguments[3];}).bind(null, 0)('a','b','c')"),
+       nxt_string("c") },
+
     { nxt_string("(function(){return arguments.callee;})()"),
       nxt_string("TypeError: \"caller\", \"callee\" properties may not be accessed") },