]> git.kaiwu.me - njs.git/commitdiff
Fixed Number() with boolean, null and undefined arguments.
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 3 Jul 2018 11:15:29 +0000 (14:15 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Tue, 3 Jul 2018 11:15:29 +0000 (14:15 +0300)
This fixes #25 issue on GitHub.

njs/njs_number.c
njs/test/njs_unit_test.c

index b49e8d448de77a53950e61eb47770a8880c8af60..54684d29bf8aba2ae6d29bf44d29f775282b2c36 100644 (file)
@@ -377,7 +377,7 @@ njs_number_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
     }
 
     if (vm->top_frame->ctor) {
-        object = njs_object_value_alloc(vm, value, value->type);
+        object = njs_object_value_alloc(vm, value, NJS_NUMBER);
         if (nxt_slow_path(object == NULL)) {
             return NXT_ERROR;
         }
@@ -387,7 +387,7 @@ njs_number_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs,
         vm->retval.data.truth = 1;
 
     } else {
-        vm->retval = *value;
+        njs_value_number_set(&vm->retval, value->data.u.number);
     }
 
     return NXT_OK;
index 1490b37c7eae7182e5b2525a5e3ba456bc488a3f..b82085f85cf3b76b56d9b449968cafde9ac3b4a7 100644 (file)
@@ -6117,6 +6117,30 @@ static njs_unit_test_t  njs_test[] =
     { nxt_string("new Number"),
       nxt_string("0") },
 
+    { nxt_string("new Number(undefined)"),
+      nxt_string("NaN") },
+
+    { nxt_string("new Number(null)"),
+      nxt_string("0") },
+
+    { nxt_string("new Number(true)"),
+      nxt_string("1") },
+
+    { nxt_string("new Number(false)"),
+      nxt_string("0") },
+
+    { nxt_string("Number(undefined)"),
+      nxt_string("NaN") },
+
+    { nxt_string("Number(null)"),
+      nxt_string("0") },
+
+    { nxt_string("Number(true)"),
+      nxt_string("1") },
+
+    { nxt_string("Number(false)"),
+      nxt_string("0") },
+
     { nxt_string("Number(123)"),
       nxt_string("123") },