njs_generate_code(parser, njs_vmcode_prop_next_t, prop_next);
prop_next->code.operation = njs_vmcode_property_next;
prop_next->code.operands = NJS_VMCODE_3OPERANDS;
- prop_next->code.retval = NJS_VMCODE_RETVAL;
+ prop_next->code.retval = NJS_VMCODE_NO_RETVAL;
prop_next->retval = foreach->left->index;
prop_next->object = foreach->right->index;
prop_next->next = index;
{
njs_ret_t ret;
nxt_uint_t n;
+ njs_value_t *retval;
njs_array_t *array;
njs_extern_t *ext;
njs_object_prop_t *prop;
njs_vmcode_prop_next_t *code;
code = (njs_vmcode_prop_next_t *) vm->current;
+ retval = njs_vmcode_operand(vm, code->retval);
if (njs_is_object(object)) {
next = value->data.u.next;
n = next->index++;
if (njs_is_valid(&array->start[n])) {
- njs_number_set(&vm->retval, n);
+ njs_number_set(retval, n);
return code->offset;
}
prop = nxt_lvlhsh_each(&object->data.u.object->hash, &next->lhe);
if (prop != NULL) {
- vm->retval = prop->name;
+ *retval = prop->name;
return code->offset;
}
nxt_mem_cache_free(vm->mem_cache_pool, next);
- vm->retval = njs_value_void;
-
} else if (njs_is_external(object)) {
ext = object->data.u.external;
if (ext->next != NULL) {
- ret = ext->next(vm, &vm->retval, vm->external[ext->object], value);
+ ret = ext->next(vm, retval, vm->external[ext->object], value);
if (ret == NXT_OK) {
return code->offset;
"for (var i in o) { s += i }; s"),
nxt_string("abc") },
+ { nxt_string("var o = { a: 1, b: 2, c: 3 }; for (var i in o); i"),
+ nxt_string("c") },
+
+ { nxt_string("var o = {}; i = 7; for (var i in o); i"),
+ nxt_string("7") },
+
+ { nxt_string("var a = [1,2,3]; for (var i in a); i"),
+ nxt_string("2") },
+
/* RegExp. */
{ nxt_string("/./x"),