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);
}
}
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);
}
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);
}
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);
}
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);
}
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;
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;
}
continue;
}
- if (function != pr->value.data.u.function) {
+ if (function != njs_function(&pr->value)) {
continue;
}
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) {
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:
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);
}
{
njs_function_t *function, *copy;
- function = value->data.u.function;
+ function = njs_function(value);
if (!function->object.shared) {
return function;
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));
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);
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;
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;
}
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);
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)
{
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);
}
{
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);
}
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;
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);
}
break;
case NJS_FUNCTION:
- if (value->data.u.function->native) {
+ if (njs_function(value)->native) {
njs_dump("[Function: native]");
} else {
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) {
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;
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);
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);
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))
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;
}
} else {
- r->function = args[2].data.u.function;
+ r->function = njs_function(&args[2]);
}
r->part[0].start = string.start;
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;
continue;
}
- function = prop->value.data.u.function;
+ function = njs_function(&prop->value);
ret = njs_function_apply(vm, function, value, 1,
(njs_index_t) retval);
((value)->data.u.function)
+#define njs_function_lambda(value) \
+ ((value)->data.u.function->u.lambda)
+
+
#define njs_object(value) \
((value)->data.u.object)
}
+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)
{
value = njs_vm_value(vm, name);
if (njs_is_function(value)) {
- return value->data.u.function;
+ return njs_function(value);
}
return NULL;
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);
}
if (nxt_fast_path(njs_is_function(value))) {
- function = value->data.u.function;
+ function = njs_function(value);
if (ctor) {
if (!function->ctor) {
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);