From: Dmitry Volyntsev Date: Mon, 8 Jul 2019 14:51:35 +0000 (+0300) Subject: Using njs_function() and njs_set_function() where applicable. X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/static/gitweb.js?a=commitdiff_plain;h=de829bb691058ac96208125fc4004c6f1270e6fa;p=njs.git Using njs_function() and njs_set_function() where applicable. --- diff --git a/njs/njs_array.c b/njs/njs_array.c index 7edd538e..99b18749 100644 --- a/njs/njs_array.c +++ b/njs/njs_array.c @@ -970,7 +970,7 @@ njs_array_prototype_to_string(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, prop = njs_object_property(vm, njs_object(&args[0]), &lhq); if (nxt_fast_path(prop != NULL && njs_is_function(&prop->value))) { - return njs_function_replace(vm, prop->value.data.u.function, + return njs_function_replace(vm, njs_function(&prop->value), args, nargs, retval); } } @@ -1879,7 +1879,7 @@ njs_array_prototype_find_apply(njs_vm_t *vm, njs_array_iter_t *iter, arguments[3] = args[0]; - return njs_function_apply(vm, args[1].data.u.function, arguments, 4, + return njs_function_apply(vm, njs_function(&args[1]), arguments, 4, (njs_index_t) &iter->retval); } @@ -2026,7 +2026,7 @@ njs_array_prototype_reduce_continuation(njs_vm_t *vm, njs_value_t *args, arguments[4] = args[0]; - return njs_function_apply(vm, args[1].data.u.function, arguments, 5, + return njs_function_apply(vm, njs_function(&args[1]), arguments, 5, (njs_index_t) &iter->retval); } @@ -2090,7 +2090,7 @@ njs_array_iterator_apply(njs_vm_t *vm, njs_array_iter_t *iter, arguments[3] = args[0]; - return njs_function_apply(vm, args[1].data.u.function, arguments, 4, + return njs_function_apply(vm, njs_function(&args[1]), arguments, 4, (njs_index_t) &iter->retval); } @@ -2163,7 +2163,7 @@ njs_array_prototype_reduce_right_continuation(njs_vm_t *vm, njs_value_t *args, arguments[4] = args[0]; - return njs_function_apply(vm, args[1].data.u.function, arguments, 5, + return njs_function_apply(vm, njs_function(&args[1]), arguments, 5, (njs_index_t) &iter->retval); } @@ -2236,7 +2236,7 @@ njs_array_prototype_sort(njs_vm_t *vm, njs_value_t *args, sort->retval = njs_value_zero; if (nargs > 1 && njs_is_function(&args[1])) { - sort->function = args[1].data.u.function; + sort->function = njs_function(&args[1]); } else { sort->function = (njs_function_t *) &njs_array_string_sort_function; diff --git a/njs/njs_builtin.c b/njs/njs_builtin.c index 8ab2c3bd..833ba434 100644 --- a/njs/njs_builtin.c +++ b/njs/njs_builtin.c @@ -536,9 +536,7 @@ njs_builtin_objects_clone(njs_vm_t *vm) values = vm->scopes[NJS_SCOPE_GLOBAL]; for (i = NJS_CONSTRUCTOR_OBJECT; i < NJS_CONSTRUCTOR_MAX; i++) { - values[i].type = NJS_FUNCTION; - values[i].data.truth = 1; - values[i].data.u.function = &vm->constructors[i]; + njs_set_function(&values[i], &vm->constructors[i]); vm->constructors[i].object.__proto__ = function_prototype; } @@ -981,7 +979,7 @@ njs_builtin_match(const njs_object_init_t **objects, njs_function_t *function, continue; } - if (function != pr->value.data.u.function) { + if (function != njs_function(&pr->value)) { continue; } diff --git a/njs/njs_error.c b/njs/njs_error.c index b5f89773..9af97026 100644 --- a/njs/njs_error.c +++ b/njs/njs_error.c @@ -542,7 +542,7 @@ njs_memory_error_prototype_create(njs_vm_t *vm, njs_value_t *value, index = NJS_PROTOTYPE_INTERNAL_ERROR; - function = value->data.u.function; + function = njs_function(value); proto = njs_property_prototype_create(vm, &function->object.hash, &vm->prototypes[index].object); if (proto == NULL) { diff --git a/njs/njs_fs.c b/njs/njs_fs.c index e2bdd6fe..cf88551c 100644 --- a/njs/njs_fs.c +++ b/njs/njs_fs.c @@ -289,7 +289,7 @@ done: cont = njs_vm_continuation(vm); cont->u.cont.function = njs_fs_done; - return njs_function_apply(vm, callback->data.u.function, + return njs_function_apply(vm, njs_function(callback), arguments, 3, (njs_index_t) &vm->retval); fail: @@ -709,7 +709,7 @@ done: cont = njs_vm_continuation(vm); cont->u.cont.function = njs_fs_done; - return njs_function_apply(vm, callback->data.u.function, + return njs_function_apply(vm, njs_function(callback), arguments, 2, (njs_index_t) &vm->retval); } diff --git a/njs/njs_function.c b/njs/njs_function.c index 6f3c7751..545b7c94 100644 --- a/njs/njs_function.c +++ b/njs/njs_function.c @@ -80,7 +80,7 @@ njs_function_value_copy(njs_vm_t *vm, njs_value_t *value) { njs_function_t *function, *copy; - function = value->data.u.function; + function = njs_function(value); if (!function->object.shared) { return function; @@ -974,7 +974,7 @@ njs_function_prototype_call(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, nargs = 0; } - function = args[0].data.u.function; + function = njs_function(&args[0]); ret = njs_function_activate(vm, function, this, &args[2], nargs, retval, sizeof(njs_vmcode_function_call_t)); @@ -1018,7 +1018,7 @@ njs_function_prototype_apply(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, return NXT_ERROR; } - func = (njs_argument(args, 0))->data.u.function; + func = njs_function(njs_argument(args, 0)); this = njs_arg(args, nargs, 1); arr_like = njs_arg(args, nargs, 2); @@ -1133,7 +1133,7 @@ njs_function_prototype_bind(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, return NXT_ERROR; } - function = njs_function_copy(vm, args[0].data.u.function); + function = njs_function_copy(vm, njs_function(&args[0])); if (nxt_slow_path(function == NULL)) { njs_memory_error(vm); return NXT_ERROR; @@ -1163,9 +1163,7 @@ njs_function_prototype_bind(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, memcpy(values, args, size); - vm->retval.data.u.function = function; - vm->retval.type = NJS_FUNCTION; - vm->retval.data.truth = 1; + njs_set_function(&vm->retval, function); return NXT_OK; } diff --git a/njs/njs_generator.c b/njs/njs_generator.c index be60bbf6..3170b1e0 100644 --- a/njs/njs_generator.c +++ b/njs/njs_generator.c @@ -2319,7 +2319,7 @@ njs_generate_function_declaration(njs_vm_t *vm, njs_generator_t *generator, return NXT_OK; } - lambda = var->value.data.u.function->u.lambda; + lambda = njs_function_lambda(&var->value); ret = njs_generate_function_scope(vm, lambda, node, &node->u.reference.name); diff --git a/njs/njs_json.c b/njs/njs_json.c index 2ea449b5..e9ddbf47 100644 --- a/njs/njs_json.c +++ b/njs/njs_json.c @@ -223,7 +223,7 @@ njs_json_parse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, parse = njs_vm_continuation(vm); parse->u.cont.function = njs_json_parse_continuation; - parse->function = reviver->data.u.function; + parse->function = njs_function(reviver); if (nxt_array_init(&parse->stack, NULL, 4, sizeof(njs_json_state_t), &njs_array_mem_proto, vm->mem_pool) @@ -256,7 +256,7 @@ njs_vm_json_parse(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs) { njs_function_t *parse; - parse = njs_json_object_properties[0].value.data.u.function; + parse = njs_function(&njs_json_object_properties[0].value); return njs_vm_call(vm, parse, args, nargs); } @@ -354,7 +354,7 @@ njs_vm_json_stringify(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs) { njs_function_t *stringify; - stringify = njs_json_object_properties[1].value.data.u.function; + stringify = njs_function(&njs_json_object_properties[1].value); return njs_vm_call(vm, stringify, args, nargs); } @@ -1490,7 +1490,7 @@ njs_object_to_json_function(njs_vm_t *vm, njs_value_t *value) prop = njs_object_property(vm, njs_object(value), &lhq); if (prop != NULL && njs_is_function(&prop->value)) { - return prop->value.data.u.function; + return njs_function(&prop->value); } return NULL; @@ -1582,7 +1582,7 @@ njs_json_stringify_replacer(njs_vm_t *vm, njs_json_stringify_t* stringify, njs_set_invalid(&stringify->retval); - return njs_function_apply(vm, stringify->replacer.data.u.function, + return njs_function_apply(vm, njs_function(&stringify->replacer), arguments, 3, (njs_index_t) &stringify->retval); } @@ -2212,7 +2212,7 @@ njs_dump_value(njs_json_stringify_t *stringify, const njs_value_t *value, break; case NJS_FUNCTION: - if (value->data.u.function->native) { + if (njs_function(value)->native) { njs_dump("[Function: native]"); } else { diff --git a/njs/njs_object.c b/njs/njs_object.c index eafc52cf..32097eb2 100644 --- a/njs/njs_object.c +++ b/njs/njs_object.c @@ -1594,7 +1594,7 @@ njs_object_prototype_create(njs_vm_t *vm, njs_value_t *value, const njs_value_t *proto; proto = NULL; - function = value->data.u.function; + function = njs_function(value); index = function - vm->constructors; if (index >= 0 && index < NJS_PROTOTYPE_MAX) { diff --git a/njs/njs_object_property.c b/njs/njs_object_property.c index 79f009ae..a1bac6fc 100644 --- a/njs/njs_object_property.c +++ b/njs/njs_object_property.c @@ -414,9 +414,7 @@ njs_external_property_query(njs_vm_t *vm, njs_property_query_t *pq, done: if (ext_proto->type == NJS_EXTERN_METHOD) { - prop->value.type = NJS_FUNCTION; - prop->value.data.u.function = ext_proto->function; - prop->value.data.truth = 1; + njs_set_function(&prop->value, ext_proto->function); } pq->lhq.value = prop; @@ -523,7 +521,7 @@ njs_value_property(njs_vm_t *vm, const njs_value_t *value, break; } - return njs_function_activate(vm, prop->getter.data.u.function, + return njs_function_activate(vm, njs_function(&prop->getter), value, NULL, 0, (njs_index_t) retval, advance); @@ -631,7 +629,7 @@ njs_value_property_set(njs_vm_t *vm, njs_value_t *object, if (njs_is_function(&prop->setter)) { return njs_function_activate(vm, - prop->setter.data.u.function, + njs_function(&prop->setter), object, value, 1, (njs_index_t) &vm->retval, advance); diff --git a/njs/njs_parser.c b/njs/njs_parser.c index c27771f4..1f86dbc8 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -619,9 +619,7 @@ njs_parser_function_alloc(njs_vm_t *vm, njs_parser_t *parser, return NULL; } - var->value.data.u.function = function; - var->value.type = NJS_FUNCTION; - var->value.data.truth = 1; + njs_set_function(&var->value, function); if (var->index != NJS_INDEX_NONE && njs_scope_accumulative(vm, parser->scope)) diff --git a/njs/njs_parser_terminal.c b/njs/njs_parser_terminal.c index 6d9a47d4..dbcffd99 100644 --- a/njs/njs_parser_terminal.c +++ b/njs/njs_parser_terminal.c @@ -452,16 +452,13 @@ njs_parser_builtin(njs_vm_t *vm, njs_parser_t *parser, njs_parser_node_t *node, case NJS_FUNCTION: index = node->token - NJS_TOKEN_FIRST_FUNCTION; - var->value.data.u.function = &vm->shared->functions[index]; + njs_set_function(&var->value, &vm->shared->functions[index]); break; default: return NXT_ERROR; } - var->value.type = type; - var->value.data.truth = 1; - ret = njs_variable_reference(vm, scope, node, name, hash, NJS_REFERENCE); if (nxt_slow_path(ret != NXT_OK)) { return NXT_ERROR; diff --git a/njs/njs_string.c b/njs/njs_string.c index 2ce4c586..30c1128e 100644 --- a/njs/njs_string.c +++ b/njs/njs_string.c @@ -3039,7 +3039,7 @@ njs_string_prototype_replace(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, } } else { - r->function = args[2].data.u.function; + r->function = njs_function(&args[2]); } r->part[0].start = string.start; diff --git a/njs/njs_time.c b/njs/njs_time.c index 5bb1ffef..84598446 100644 --- a/njs/njs_time.c +++ b/njs/njs_time.c @@ -48,7 +48,7 @@ njs_set_timer(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, n = immediate ? 2 : 3; event->destructor = ops->clear_timer; - event->function = args[1].data.u.function; + event->function = njs_function(&args[1]); event->nargs = (nargs >= n) ? nargs - n : 0; event->once = 1; event->posted = 0; diff --git a/njs/njs_value.c b/njs/njs_value.c index fb3e10c8..511720a6 100644 --- a/njs/njs_value.c +++ b/njs/njs_value.c @@ -210,7 +210,7 @@ njs_value_to_primitive(njs_vm_t *vm, njs_value_t *value, nxt_uint_t hint) continue; } - function = prop->value.data.u.function; + function = njs_function(&prop->value); ret = njs_function_apply(vm, function, value, 1, (njs_index_t) retval); diff --git a/njs/njs_value.h b/njs/njs_value.h index 564d2d9f..ca264716 100644 --- a/njs/njs_value.h +++ b/njs/njs_value.h @@ -516,6 +516,10 @@ typedef enum { ((value)->data.u.function) +#define njs_function_lambda(value) \ + ((value)->data.u.function->u.lambda) + + #define njs_object(value) \ ((value)->data.u.object) @@ -606,6 +610,15 @@ njs_set_array(njs_value_t *value, njs_array_t *array) } +nxt_inline void +njs_set_function(njs_value_t *value, njs_function_t *function) +{ + value->data.u.function = function; + value->type = NJS_FUNCTION; + value->data.truth = 1; +} + + nxt_inline void njs_set_date(njs_value_t *value, njs_date_t *date) { diff --git a/njs/njs_variable.c b/njs/njs_variable.c index 7ecabbc2..0ed753ac 100644 --- a/njs/njs_variable.c +++ b/njs/njs_variable.c @@ -666,7 +666,7 @@ njs_vm_function(njs_vm_t *vm, const nxt_str_t *name) value = njs_vm_value(vm, name); if (njs_is_function(value)) { - return value->data.u.function; + return njs_function(value); } return NULL; diff --git a/njs/njs_vm.c b/njs/njs_vm.c index 8a372290..264d96aa 100644 --- a/njs/njs_vm.c +++ b/njs/njs_vm.c @@ -294,9 +294,7 @@ njs_vmcode_function(njs_vm_t *vm, njs_value_t *invld1, njs_value_t *invld2) return NXT_ERROR; } - vm->retval.data.u.function = function; - vm->retval.type = NJS_FUNCTION; - vm->retval.data.truth = 1; + njs_set_function(&vm->retval, function); return sizeof(njs_vmcode_function_t); } @@ -1746,7 +1744,7 @@ njs_function_frame_create(njs_vm_t *vm, njs_value_t *value, if (nxt_fast_path(njs_is_function(value))) { - function = value->data.u.function; + function = njs_function(value); if (ctor) { if (!function->ctor) { @@ -1792,7 +1790,7 @@ njs_function_new_object(njs_vm_t *vm, njs_value_t *value) lhq.key_hash = NJS_PROTOTYPE_HASH; lhq.key = nxt_string_value("prototype"); lhq.proto = &njs_object_hash_proto; - function = value->data.u.function; + function = njs_function(value); ret = nxt_lvlhsh_find(&function->object.hash, &lhq);