while (--arg_count >= 0) {
arg = p++;
if (arg) {
- if (Z_TYPE_P(arg) != IS_OBJECT) {
- SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
- }
- Z_ADDREF_P(arg);
+//??? if (Z_TYPE_P(arg) != IS_OBJECT) {
+//??? SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
+//??? }
+ if (IS_REFCOUNTED(Z_TYPE_P(arg))) Z_ADDREF_P(arg);
add_next_index_zval(arg_array, arg);
} else {
add_next_index_null(arg_array);
if (Z_LVAL(modifiers->u.constant) & ZEND_ACC_ABSTRACT) {
if(Z_LVAL(modifiers->u.constant) & ZEND_ACC_PRIVATE) {
- zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot be declared private", method_type, CG(active_class_entry)->name, Z_STRVAL(function_name->u.constant));
+ zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot be declared private", method_type, CG(active_class_entry)->name->val, Z_STRVAL(function_name->u.constant));
}
if (Z_LVAL(body->u.constant) == ZEND_ACC_ABSTRACT) {
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
SET_UNUSED(opline->op2);
} else {
/* we had code in the function body */
- zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot contain body", method_type, CG(active_class_entry)->name, Z_STRVAL(function_name->u.constant));
+ zend_error_noreturn(E_COMPILE_ERROR, "%s function %s::%s() cannot contain body", method_type, CG(active_class_entry)->name->val, Z_STRVAL(function_name->u.constant));
}
} else {
if (Z_LVAL(body->u.constant) == ZEND_ACC_ABSTRACT) {
- zend_error_noreturn(E_COMPILE_ERROR, "Non-abstract method %s::%s() must contain body", CG(active_class_entry)->name, Z_STRVAL(function_name->u.constant));
+ zend_error_noreturn(E_COMPILE_ERROR, "Non-abstract method %s::%s() must contain body", CG(active_class_entry)->name->val, Z_STRVAL(function_name->u.constant));
}
}
}
if (is_method) {
if (CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE) {
if ((Z_LVAL(fn_flags_znode->u.constant) & ~(ZEND_ACC_STATIC|ZEND_ACC_PUBLIC))) {
- zend_error_noreturn(E_COMPILE_ERROR, "Access type for interface method %s::%s() must be omitted", CG(active_class_entry)->name, Z_STRVAL(function_name->u.constant));
+ zend_error_noreturn(E_COMPILE_ERROR, "Access type for interface method %s::%s() must be omitted", CG(active_class_entry)->name->val, Z_STRVAL(function_name->u.constant));
}
Z_LVAL(fn_flags_znode->u.constant) |= ZEND_ACC_ABSTRACT; /* propagates to the rest of the parser */
}
zend_do_build_namespace_name(&tmp, &tmp, class_name TSRMLS_CC);
*class_name = tmp;
STR_FREE(lcname);
- STR_ALLOC(Z_STRLEN(class_name->u.constant), 0);
+ lcname = STR_ALLOC(Z_STRLEN(class_name->u.constant), 0);
zend_str_tolower_copy(lcname->val, Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant));
}
if (access_type & ZEND_ACC_FINAL) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare property %s::$%s final, the final modifier is allowed only for methods and classes",
- CG(active_class_entry)->name, Z_STRVAL(var_name->u.constant));
+ CG(active_class_entry)->name->val, Z_STRVAL(var_name->u.constant));
}
if ((existing_property_info = zend_hash_find_ptr(&CG(active_class_entry)->properties_info, Z_STR(var_name->u.constant))) != NULL) {
static int _build_trace_args(zval *arg TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
{
- zend_string *str;
+ zend_string *str, **str_ptr;
- str = va_arg(args, zend_string*);
+ str_ptr = va_arg(args, zend_string**);
+ str = *str_ptr;
/* the trivial way would be to do:
* conver_to_string_ex(arg);
* but that could cause some E_NOTICE and also damn long lines.
*/
+ if (Z_TYPE_P(arg) == IS_REFERENCE) {
+ arg = Z_REFVAL_P(arg);
+ }
switch (Z_TYPE_P(arg)) {
case IS_NULL:
TRACE_APPEND_STR("NULL, ");
default:
break;
}
+ *str_ptr = str;
return ZEND_HASH_APPLY_KEEP;
}
/* }}} */
long line;
HashTable *ht = Z_ARRVAL_P(frame);
zval *file, *tmp;
- zend_string *str;
+ zend_string *str, **str_ptr;
if (Z_TYPE_P(frame) != IS_ARRAY) {
zend_error(E_WARNING, "Expected array for frame %lu", hash_key->h);
return ZEND_HASH_APPLY_KEEP;
}
- str = va_arg(args, zend_string*);
+ str_ptr = va_arg(args, zend_string**);
+ str = *str_ptr;
num = va_arg(args, int*);
s_tmp = emalloc(1 + MAX_LENGTH_OF_LONG + 1 + 1);
if (tmp) {
if (Z_TYPE_P(tmp) == IS_ARRAY) {
int last_len = str->len;
- zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, (apply_func_args_t)_build_trace_args, 1, str);
+ zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, (apply_func_args_t)_build_trace_args, 1, &str);
if (last_len != str->len) {
str->len -= 2; /* remove last ', ' */
}
}
}
TRACE_APPEND_STR(")\n");
+ *str_ptr = str;
return ZEND_HASH_APPLY_KEEP;
}
/* }}} */
str = STR_ALLOC(0, 0);
trace = zend_read_property(default_exception_ce, getThis(), "trace", sizeof("trace")-1, 1 TSRMLS_CC);
- zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)_build_trace_string, 2, str, &num);
+ zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)_build_trace_string, 2, &str, &num);
len = sprintf(s_tmp, "#%d {main}", num);
TRACE_APPEND_STRL(s_tmp, len);
if (Z_STRLEN(message) > 0) {
len = zend_spprintf(&str, 0, "exception '%s' with message '%s' in %s:%ld\nStack trace:\n%s%s%s",
- Z_OBJCE_P(exception)->name, Z_STRVAL(message), Z_STRVAL(file), Z_LVAL(line),
+ Z_OBJCE_P(exception)->name->val, Z_STRVAL(message), Z_STRVAL(file), Z_LVAL(line),
(Z_TYPE(trace) == IS_STRING && Z_STRLEN(trace)) ? Z_STRVAL(trace) : "#0 {main}\n",
len ? "\n\nNext " : "", prev_str);
} else {
len = zend_spprintf(&str, 0, "exception '%s' in %s:%ld\nStack trace:\n%s%s%s",
- Z_OBJCE_P(exception)->name, Z_STRVAL(file), Z_LVAL(line),
+ Z_OBJCE_P(exception)->name->val, Z_STRVAL(file), Z_LVAL(line),
(Z_TYPE(trace) == IS_STRING && Z_STRLEN(trace)) ? Z_STRVAL(trace) : "#0 {main}\n",
len ? "\n\nNext " : "", prev_str);
}
} else {
retval = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, dim_type, type TSRMLS_CC);
}
- ZVAL_COPY(result, retval);
+//??? ZVAL_COPY(result, retval);
+ ZVAL_INDIRECT(result, retval);
return;
break;
//??? }
//??? AI_SET_PTR(result, overloaded_result);
//??? PZVAL_LOCK(overloaded_result);
- ZVAL_COPY(result, overloaded_result);
+//??? ZVAL_COPY(result, overloaded_result);
+ ZVAL_INDIRECT(result, overloaded_result);
} else {
result = &EG(error_zval);
}
actual_len -= (actual - Z_STRVAL_P(p));
if (inline_change) {
zend_string *s = STR_INIT(actual, actual_len, 0);
- STR_RELEASE(Z_STR_P(p));
+//??? STR_RELEASE(Z_STR_P(p));
Z_STR_P(p) = s;
}
}
zend_error(E_ERROR, "Undefined constant '%s'", save->val);
}
if (inline_change) {
- STR_RELEASE(save);
+//??? STR_RELEASE(save);
}
save = NULL;
}
if (inline_change && save && save->val != actual) {
- STR_RELEASE(save);
+//??? STR_RELEASE(save);
}
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", actual, actual);
p->type = IS_STRING;
}
} else {
if (inline_change) {
- STR_RELEASE(Z_STR_P(p));
+//??? STR_RELEASE(Z_STR_P(p));
}
*p = const_value;
}
- Z_SET_REFCOUNT_P(p, refcount);
+ if (IS_REFCOUNTED(Z_TYPE_P(p))) Z_SET_REFCOUNT_P(p, refcount);
//??? Z_SET_ISREF_TO_P(p, is_ref);
} else if (Z_TYPE_P(p) == IS_CONSTANT_ARRAY) {
zval *element, new_val;
zval params[2];
- ZVAL_COPY_VALUE(¶ms[0], arg1);
- ZVAL_COPY_VALUE(¶ms[1], arg2);
+ if (param_count > 0) {
+ ZVAL_COPY_VALUE(¶ms[0], arg1);
+ }
+ if (param_count > 1) {
+ ZVAL_COPY_VALUE(¶ms[1], arg2);
+ }
fci.size = sizeof(fci);
/*fci.function_table = NULL; will be read form zend_class_entry of object if needed */
} else {
zval garbage;
- ZVAL_COPY_VALUE(&garbage, Z_REFVAL_P(variable_ptr));
+ ZVAL_COPY_VALUE(&garbage, variable_ptr);
/* if we assign referenced variable, we should separate it */
- Z_ADDREF_P(value);
- if (Z_ISREF_P(value)) {
- SEPARATE_ZVAL(value);
+ if (IS_REFCOUNTED(Z_TYPE_P(value))) {
+ Z_ADDREF_P(value);
+ if (Z_ISREF_P(value)) {
+ SEPARATE_ZVAL(value);
+ }
}
ZVAL_COPY_VALUE(variable_ptr, value);
zval_ptr_dtor(&garbage);
}
} else if (EXPECTED(property_info != NULL)) {
/* if we assign referenced variable, we should separate it */
- Z_ADDREF_P(value);
- if (Z_ISREF_P(value)) {
- SEPARATE_ZVAL(value);
+ if (IS_REFCOUNTED(Z_TYPE_P(value))) {
+ Z_ADDREF_P(value);
+ if (Z_ISREF_P(value)) {
+ SEPARATE_ZVAL(value);
+ }
}
if (EXPECTED((property_info->flags & ZEND_ACC_STATIC) == 0) &&
property_info->offset >= 0) {
if (i_zend_is_true(value TSRMLS_CC)) {
if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
- Z_ADDREF_P(value);
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!IS_OP1_TMP_FREE()) {
if (i_zend_is_true(value TSRMLS_CC)) {
if (IS_CONST == IS_VAR || IS_CONST == IS_CV) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
- Z_ADDREF_P(value);
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
if (i_zend_is_true(value TSRMLS_CC)) {
if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
- Z_ADDREF_P(value);
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!1) {
if (i_zend_is_true(value TSRMLS_CC)) {
if (IS_VAR == IS_VAR || IS_VAR == IS_CV) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
- Z_ADDREF_P(value);
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {
if (i_zend_is_true(value TSRMLS_CC)) {
if (IS_CV == IS_VAR || IS_CV == IS_CV) {
ZVAL_COPY(EX_VAR(opline->result.var), value);
- Z_ADDREF_P(value);
} else {
ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value);
if (!0) {