njs_vmcode_object_copy_t *copy;
index = njs_variable_index(vm, node);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
njs_index_t index;
index = njs_variable_index(vm, node);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
lvalue = node->left;
index = njs_variable_index(vm, lvalue);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
if (expr->token == NJS_TOKEN_NAME) {
expr->index = njs_variable_typeof(vm, expr);
+ if (expr->u.reference.variable) {
+ ret = njs_generate_variable(vm, generator, expr);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ return NXT_ERROR;
+ }
+
+ } else {
+ expr->index = njs_value_index(vm, &njs_value_undefined,
+ generator->runtime);
+ }
+
} else {
ret = njs_generator(vm, generator, node->left);
if (nxt_slow_path(ret != NXT_OK)) {
/* A "try/catch" case. */
catch_index = njs_variable_index(vm, node->left);
- if (nxt_slow_path(catch_index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(catch_index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
/* A try/catch/finally case. */
catch_index = njs_variable_index(vm, node->left->left);
- if (nxt_slow_path(catch_index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(catch_index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
expr = node->right;
index = njs_variable_index(vm, lvalue);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
+ if (nxt_slow_path(index == NJS_INDEX_NONE)) {
return NXT_ERROR;
}
njs_ret_t
njs_vmcode_typeof(njs_vm_t *vm, njs_value_t *value, njs_value_t *invld)
{
- nxt_uint_t type;
-
/* ECMAScript 5.1: null, array and regexp are objects. */
static const njs_value_t *types[NJS_TYPE_MAX] = {
&njs_string_object,
};
- /* A zero index means non-declared variable. */
- type = (value != NULL) ? value->type : NJS_UNDEFINED;
-
- vm->retval = *types[type];
+ vm->retval = *types[value->type];
return sizeof(njs_vmcode_2addr_t);
}