zend_free_op free_op1;
zval *expr;
zval *result = EX_VAR(opline->result.var);
+ HashTable *ht;
SAVE_OPLINE();
expr = GET_OP1_ZVAL_PTR(BP_VAR_R);
if (opline->extended_value == IS_ARRAY) {
if (Z_TYPE_P(expr) != IS_OBJECT) {
if (Z_TYPE_P(expr) != IS_NULL) {
- ZVAL_ARR(result, zend_new_array(8));
+ ZVAL_ARR(result, zend_new_array(1));
expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
if (OP1_TYPE == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
convert_to_array(result);
}
} else {
- if (Z_TYPE_P(expr) != IS_ARRAY) {
- object_init(result);
- if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
- if (OP1_TYPE == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
- } else {
- if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
- }
+ ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
+ if (Z_TYPE_P(expr) == IS_ARRAY) {
+ ht = zend_symtable_to_proptable(Z_ARR_P(expr));
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
+ /* TODO: try not to duplicate immutable arrays as well ??? */
+ ht = zend_array_dup(ht);
+ }
+ Z_OBJ_P(result)->properties = ht;
+ } else if (Z_TYPE_P(expr) != IS_NULL) {
+ Z_OBJ_P(result)->properties = ht = zend_new_array(1);
+ expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
+ if (OP1_TYPE == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
+ } else {
+ if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- } else {
- ZVAL_COPY(result, expr);
- convert_to_object(result);
}
}
}
zval *expr;
zval *result = EX_VAR(opline->result.var);
+ HashTable *ht;
SAVE_OPLINE();
expr = RT_CONSTANT(opline, opline->op1);
if (opline->extended_value == IS_ARRAY) {
if (Z_TYPE_P(expr) != IS_OBJECT) {
if (Z_TYPE_P(expr) != IS_NULL) {
- ZVAL_ARR(result, zend_new_array(8));
+ ZVAL_ARR(result, zend_new_array(1));
expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
if (IS_CONST == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
convert_to_array(result);
}
} else {
- if (Z_TYPE_P(expr) != IS_ARRAY) {
- object_init(result);
- if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
- if (IS_CONST == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
- } else {
- if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
- }
+ ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
+ if (Z_TYPE_P(expr) == IS_ARRAY) {
+ ht = zend_symtable_to_proptable(Z_ARR_P(expr));
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
+ /* TODO: try not to duplicate immutable arrays as well ??? */
+ ht = zend_array_dup(ht);
+ }
+ Z_OBJ_P(result)->properties = ht;
+ } else if (Z_TYPE_P(expr) != IS_NULL) {
+ Z_OBJ_P(result)->properties = ht = zend_new_array(1);
+ expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
+ if (IS_CONST == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
+ } else {
+ if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- } else {
- ZVAL_COPY(result, expr);
- convert_to_object(result);
}
}
}
zend_free_op free_op1;
zval *expr;
zval *result = EX_VAR(opline->result.var);
+ HashTable *ht;
SAVE_OPLINE();
expr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (opline->extended_value == IS_ARRAY) {
if (Z_TYPE_P(expr) != IS_OBJECT) {
if (Z_TYPE_P(expr) != IS_NULL) {
- ZVAL_ARR(result, zend_new_array(8));
+ ZVAL_ARR(result, zend_new_array(1));
expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
if (IS_TMP_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
convert_to_array(result);
}
} else {
- if (Z_TYPE_P(expr) != IS_ARRAY) {
- object_init(result);
- if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
- if (IS_TMP_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
- } else {
- if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
- }
+ ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
+ if (Z_TYPE_P(expr) == IS_ARRAY) {
+ ht = zend_symtable_to_proptable(Z_ARR_P(expr));
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
+ /* TODO: try not to duplicate immutable arrays as well ??? */
+ ht = zend_array_dup(ht);
+ }
+ Z_OBJ_P(result)->properties = ht;
+ } else if (Z_TYPE_P(expr) != IS_NULL) {
+ Z_OBJ_P(result)->properties = ht = zend_new_array(1);
+ expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
+ if (IS_TMP_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
+ } else {
+ if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- } else {
- ZVAL_COPY(result, expr);
- convert_to_object(result);
}
}
}
zend_free_op free_op1;
zval *expr;
zval *result = EX_VAR(opline->result.var);
+ HashTable *ht;
SAVE_OPLINE();
expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
if (opline->extended_value == IS_ARRAY) {
if (Z_TYPE_P(expr) != IS_OBJECT) {
if (Z_TYPE_P(expr) != IS_NULL) {
- ZVAL_ARR(result, zend_new_array(8));
+ ZVAL_ARR(result, zend_new_array(1));
expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
if (IS_VAR == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
convert_to_array(result);
}
} else {
- if (Z_TYPE_P(expr) != IS_ARRAY) {
- object_init(result);
- if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
- if (IS_VAR == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
- } else {
- if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
- }
+ ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
+ if (Z_TYPE_P(expr) == IS_ARRAY) {
+ ht = zend_symtable_to_proptable(Z_ARR_P(expr));
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
+ /* TODO: try not to duplicate immutable arrays as well ??? */
+ ht = zend_array_dup(ht);
+ }
+ Z_OBJ_P(result)->properties = ht;
+ } else if (Z_TYPE_P(expr) != IS_NULL) {
+ Z_OBJ_P(result)->properties = ht = zend_new_array(1);
+ expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
+ if (IS_VAR == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
+ } else {
+ if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- } else {
- ZVAL_COPY(result, expr);
- convert_to_object(result);
}
}
}
zval *expr;
zval *result = EX_VAR(opline->result.var);
+ HashTable *ht;
SAVE_OPLINE();
expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC);
if (opline->extended_value == IS_ARRAY) {
if (Z_TYPE_P(expr) != IS_OBJECT) {
if (Z_TYPE_P(expr) != IS_NULL) {
- ZVAL_ARR(result, zend_new_array(8));
+ ZVAL_ARR(result, zend_new_array(1));
expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr);
if (IS_CV == IS_CONST) {
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
convert_to_array(result);
}
} else {
- if (Z_TYPE_P(expr) != IS_ARRAY) {
- object_init(result);
- if (Z_TYPE_P(expr) != IS_NULL) {
- expr = zend_hash_add_new(Z_OBJPROP_P(result), ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
- if (IS_CV == IS_CONST) {
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
- } else {
- if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
- }
+ ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def));
+ if (Z_TYPE_P(expr) == IS_ARRAY) {
+ ht = zend_symtable_to_proptable(Z_ARR_P(expr));
+ if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) {
+ /* TODO: try not to duplicate immutable arrays as well ??? */
+ ht = zend_array_dup(ht);
+ }
+ Z_OBJ_P(result)->properties = ht;
+ } else if (Z_TYPE_P(expr) != IS_NULL) {
+ Z_OBJ_P(result)->properties = ht = zend_new_array(1);
+ expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr);
+ if (IS_CV == IS_CONST) {
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr);
+ } else {
+ if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr);
}
- } else {
- ZVAL_COPY(result, expr);
- convert_to_object(result);
}
}
}