opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_OP_DATA;
- SET_UNUSED(opline->op1);
+ /* Allocate enough space to keep HashPointer on VM stack */
+ opline->op1_type = IS_TMP_VAR;
+ opline->op1.var = get_temporary_variable(CG(active_op_array));
+ if (sizeof(HashPointer) > sizeof(zval)) {
+ /* Make shure 1 zval is enough for HashPointer (2 must be enough) */
+ get_temporary_variable(CG(active_op_array));
+ }
SET_UNUSED(opline->op2);
SET_UNUSED(opline->result);
}
}
}
is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
-//??? zend_hash_get_pointer(fe_ht, EX_VAR(opline->result.var));
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+2)->op1.var));
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
is_empty = 1;
zend_ulong int_key;
fe_ht = Z_OBJPROP_P(array);
-//??? zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_set_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
do {
if ((value = zend_hash_get_current_data(fe_ht)) == NULL) {
/* reached end of iteration */
}
}
-//??? zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
break;
}
case ZEND_ITER_PLAIN_ARRAY:
fe_ht = Z_ARRVAL_P(array);
-//??? zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_set_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
if ((value = zend_hash_get_current_data(fe_ht)) == NULL) {
/* reached end of iteration */
ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
zend_hash_get_current_key_zval(fe_ht, key);
}
zend_hash_move_forward(fe_ht);
-//??? zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
break;
case ZEND_ITER_OBJECT:
}
}
is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
-//??? zend_hash_get_pointer(fe_ht, EX_VAR(opline->result.var));
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+2)->op1.var));
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
is_empty = 1;
}
}
is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
-//??? zend_hash_get_pointer(fe_ht, EX_VAR(opline->result.var));
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+2)->op1.var));
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
is_empty = 1;
}
}
is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
-//??? zend_hash_get_pointer(fe_ht, EX_VAR(opline->result.var));
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+2)->op1.var));
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
is_empty = 1;
zend_ulong int_key;
fe_ht = Z_OBJPROP_P(array);
-//??? zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_set_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
do {
if ((value = zend_hash_get_current_data(fe_ht)) == NULL) {
/* reached end of iteration */
}
}
-//??? zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
break;
}
case ZEND_ITER_PLAIN_ARRAY:
fe_ht = Z_ARRVAL_P(array);
-//??? zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_set_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
if ((value = zend_hash_get_current_data(fe_ht)) == NULL) {
/* reached end of iteration */
ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.opline_num);
zend_hash_get_current_key_zval(fe_ht, key);
}
zend_hash_move_forward(fe_ht);
-//??? zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.var).fe.fe_pos);
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+1)->op1.var));
break;
case ZEND_ITER_OBJECT:
}
}
is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
-//??? zend_hash_get_pointer(fe_ht, EX_VAR(opline->result.var));
+ zend_hash_get_pointer(fe_ht, (HashPointer*)EX_VAR((opline+2)->op1.var));
} else {
zend_error(E_WARNING, "Invalid argument supplied for foreach()");
is_empty = 1;