details: http://hg.nginx.org/njs/rev/beba11b9f2a1 branches: changeset: 197:beba11b9f2a1 user: Igor Sysoev <i...@sysoev.ru> date: Tue Oct 11 20:09:18 2016 +0300 description: Constructor function prototypes should be real functions.
diffstat: njs/njs_builtin.c | 16 +++++++++++++++- njs/njs_vm.h | 2 +- njs/test/njs_unit_test.c | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diffs (63 lines): diff -r a3588250473b -r beba11b9f2a1 njs/njs_builtin.c --- a/njs/njs_builtin.c Tue Oct 11 17:44:05 2016 +0300 +++ b/njs/njs_builtin.c Tue Oct 11 20:09:18 2016 +0300 @@ -34,6 +34,16 @@ typedef struct { } njs_function_init_t; +static njs_ret_t +njs_prototype_function(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, + njs_index_t unused) +{ + vm->retval = njs_value_void; + + return NXT_OK; +} + + nxt_int_t njs_builtin_objects_create(njs_vm_t *vm) { @@ -75,7 +85,11 @@ njs_builtin_objects_create(njs_vm_t *vm) { .object_value = { .value = njs_string(""), .object = { .type = NJS_OBJECT_STRING } } }, - { .object = { .type = NJS_FUNCTION } }, + { .function = { .native = 1, + .args_offset = 1, + .u.native = njs_prototype_function, + .object = { .type = NJS_FUNCTION } } }, + { .object = { .type = NJS_REGEXP } }, { .date = { .time = NJS_NAN, diff -r a3588250473b -r beba11b9f2a1 njs/njs_vm.h --- a/njs/njs_vm.h Tue Oct 11 17:44:05 2016 +0300 +++ b/njs/njs_vm.h Tue Oct 11 20:09:18 2016 +0300 @@ -321,12 +321,12 @@ typedef union { .type = NJS_FUNCTION, \ .truth = 1, \ .u.function = & (njs_function_t) { \ - .object.shared = 1, \ .native = 1, \ .continuation_size = _size, \ .args_types = { __VA_ARGS__ }, \ .args_offset = 1, \ .u.native = _function, \ + .object = { .type = NJS_FUNCTION, .shared = 1 }, \ } \ } \ } diff -r a3588250473b -r beba11b9f2a1 njs/test/njs_unit_test.c --- a/njs/test/njs_unit_test.c Tue Oct 11 17:44:05 2016 +0300 +++ b/njs/test/njs_unit_test.c Tue Oct 11 20:09:18 2016 +0300 @@ -4288,6 +4288,9 @@ static njs_unit_test_t njs_test[] = { nxt_string("({}).constructor === Object"), nxt_string("true") }, + { nxt_string("var a = Object.__proto__; a()"), + nxt_string("undefined") }, + { nxt_string("var a = Array(3); a"), nxt_string(",,") }, _______________________________________________ nginx-devel mailing list nginx-devel@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-devel