[njs] Setting [[Construct]] internal property for Function Objects.
Dmitry Volyntsev
xeioex at nginx.com
Mon Mar 18 16:20:23 UTC 2019
details: https://hg.nginx.org/njs/rev/2037b3ccd677
branches:
changeset: 833:2037b3ccd677
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Mon Mar 18 19:20:02 2019 +0300
description:
Setting [[Construct]] internal property for Function Objects.
According to ES5.1: 13.2 [[Construct]] is set by default.
diffstat:
njs/njs_function.c | 1 +
njs/njs_vm.c | 16 ++++++++--------
2 files changed, 9 insertions(+), 8 deletions(-)
diffs (44 lines):
diff -r 8868eed51544 -r 2037b3ccd677 njs/njs_function.c
--- a/njs/njs_function.c Mon Mar 18 16:05:27 2019 +0300
+++ b/njs/njs_function.c Mon Mar 18 19:20:02 2019 +0300
@@ -32,6 +32,7 @@ njs_function_alloc(njs_vm_t *vm)
function->object.shared = 1;
function->object.extensible = 1;
function->args_offset = 1;
+ function->ctor = 1;
function->u.lambda = nxt_mp_zalloc(vm->mem_pool,
sizeof(njs_function_lambda_t));
diff -r 8868eed51544 -r 2037b3ccd677 njs/njs_vm.c
--- a/njs/njs_vm.c Mon Mar 18 16:05:27 2019 +0300
+++ b/njs/njs_vm.c Mon Mar 18 19:20:02 2019 +0300
@@ -394,6 +394,7 @@ njs_vmcode_function(njs_vm_t *vm, njs_va
function->object.__proto__ = &vm->prototypes[NJS_PROTOTYPE_FUNCTION].object;
function->object.extensible = 1;
function->args_offset = 1;
+ function->ctor = 1;
if (nesting != 0) {
function->closure = 1;
@@ -1867,14 +1868,13 @@ njs_function_frame_create(njs_vm_t *vm,
function = value->data.u.function;
if (ctor) {
- if (function->native) {
- if (!function->ctor) {
- njs_type_error(vm, "%s is not a constructor",
- njs_type_string(value->type));
- return NXT_ERROR;
- }
-
- } else {
+ if (!function->ctor) {
+ njs_type_error(vm, "%s is not a constructor",
+ njs_type_string(value->type));
+ return NXT_ERROR;
+ }
+
+ if (!function->native) {
object = njs_function_new_object(vm, value);
if (nxt_slow_path(object == NULL)) {
return NXT_ERROR;
More information about the nginx-devel
mailing list