summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-02-21 22:41:48 +0800
committerXinchen Hui <laruence@gmail.com>2014-02-21 22:41:48 +0800
commit013cc55395e2b60e801eb9a8bced0219d17df129 (patch)
treea75541ba8d833e5e70e5f8475583d031122f6a98
parent76c28f878ae37975b5520aaedf4b8f2986fe540b (diff)
parent25490102783a0aadc1700b549f4d57380df3da22 (diff)
downloadphp-git-013cc55395e2b60e801eb9a8bced0219d17df129.tar.gz
Merge branch 'refactoring2' of github.com:zendtech/php into refactoring2
Conflicts: Zend/zend_language_scanner.c Zend/zend_language_scanner.l
-rw-r--r--Zend/zend_API.c8
-rw-r--r--Zend/zend_compile.c54
-rw-r--r--Zend/zend_language_scanner.c343
-rw-r--r--Zend/zend_language_scanner.l49
-rw-r--r--Zend/zend_vm_def.h16
-rw-r--r--Zend/zend_vm_execute.h64
-rw-r--r--ext/standard/array.c4
-rw-r--r--ext/standard/type.c24
8 files changed, 290 insertions, 272 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 58f5eccdbe..436fdae1b7 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -225,6 +225,9 @@ ZEND_API char *zend_get_type_by_const(int type) /* {{{ */
ZEND_API char *zend_zval_type_name(const zval *arg) /* {{{ */
{
+ if (Z_TYPE_P(arg) == IS_REFERENCE) {
+ arg = Z_REFVAL_P(arg);
+ }
return zend_get_type_by_const(Z_TYPE_P(arg));
}
/* }}} */
@@ -703,8 +706,9 @@ static const char *zend_parse_arg_impl(int arg_num, zval *arg, va_list *va, cons
}
break;
-//???
+//??? 'Z' iz not supported anymore and should be replaced with 'z'
case 'Z':
+ ZEND_ASSERT(c != 'Z');
default:
return "unknown";
}
@@ -2600,7 +2604,7 @@ ZEND_API int zend_register_class_alias_ex(const char *name, int name_len, zend_c
lcname = STR_ALLOC(name_len, 1);
zend_str_tolower_copy(lcname->val, name, name_len);
}
- ce = zend_hash_add_ptr(CG(class_table), lcname, &ce);
+ ce = zend_hash_add_ptr(CG(class_table), lcname, ce);
STR_RELEASE(lcname);
if (ce) {
ce->refcount++;
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index d3e98b6c95..87423e038a 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -2237,7 +2237,7 @@ void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */
/* This is a compound class name that contains namespace prefix */
if (Z_STRVAL(class_name->u.constant)[0] == '\\') {
/* The STRING name has "\" prefix */
- memmove(Z_STRVAL(class_name->u.constant), Z_STRVAL(class_name->u.constant)+1, Z_STRLEN(class_name->u.constant)-1);
+ memmove(Z_STRVAL(class_name->u.constant), Z_STRVAL(class_name->u.constant)+1, Z_STRLEN(class_name->u.constant));
Z_STR(class_name->u.constant) = STR_REALLOC(
Z_STR(class_name->u.constant),
Z_STRLEN(class_name->u.constant) - 1, 0);
@@ -2611,7 +2611,7 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{
zend_error_noreturn(E_COMPILE_ERROR,
"Call-time pass-by-reference has been removed; "
"If you would like to pass argument by reference, modify the declaration of %s().",
- function_ptr->common.function_name);
+ function_ptr->common.function_name->val);
} else {
zend_error_noreturn(E_COMPILE_ERROR, "Call-time pass-by-reference has been removed");
}
@@ -3516,13 +3516,13 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
&& parent->common.scope != (child->common.prototype ? child->common.prototype->common.scope : child->common.scope)
&& child->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_IMPLEMENTED_ABSTRACT)) {
zend_error_noreturn(E_COMPILE_ERROR, "Can't inherit abstract function %s::%s() (previously declared abstract in %s)",
- parent->common.scope->name,
- child->common.function_name,
- child->common.prototype ? child->common.prototype->common.scope->name : child->common.scope->name);
+ parent->common.scope->name->val,
+ child->common.function_name->val,
+ child->common.prototype ? child->common.prototype->common.scope->name->val : child->common.scope->name->val);
}
if (parent_flags & ZEND_ACC_FINAL) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot override final method %s::%s()", ZEND_FN_SCOPE_NAME(parent), child->common.function_name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot override final method %s::%s()", ZEND_FN_SCOPE_NAME(parent), child->common.function_name->val);
}
child_flags = child->common.fn_flags;
@@ -3530,15 +3530,15 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
*/
if ((child_flags & ZEND_ACC_STATIC) != (parent_flags & ZEND_ACC_STATIC)) {
if (child->common.fn_flags & ZEND_ACC_STATIC) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot make non static method %s::%s() static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot make non static method %s::%s() static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name->val, ZEND_FN_SCOPE_NAME(child));
} else {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot make static method %s::%s() non static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot make static method %s::%s() non static in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name->val, ZEND_FN_SCOPE_NAME(child));
}
}
/* Disallow making an inherited method abstract. */
if ((child_flags & ZEND_ACC_ABSTRACT) && !(parent_flags & ZEND_ACC_ABSTRACT)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot make non abstract method %s::%s() abstract in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name, ZEND_FN_SCOPE_NAME(child));
+ zend_error_noreturn(E_COMPILE_ERROR, "Cannot make non abstract method %s::%s() abstract in class %s", ZEND_FN_SCOPE_NAME(parent), child->common.function_name->val, ZEND_FN_SCOPE_NAME(child));
}
if (parent_flags & ZEND_ACC_CHANGED) {
@@ -3547,7 +3547,7 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
/* Prevent derived classes from restricting access that was available in parent classes
*/
if ((child_flags & ZEND_ACC_PPP_MASK) > (parent_flags & ZEND_ACC_PPP_MASK)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Access level to %s::%s() must be %s (as in class %s)%s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, zend_visibility_string(parent_flags), ZEND_FN_SCOPE_NAME(parent), (parent_flags&ZEND_ACC_PUBLIC) ? "" : " or weaker");
+ zend_error_noreturn(E_COMPILE_ERROR, "Access level to %s::%s() must be %s (as in class %s)%s", ZEND_FN_SCOPE_NAME(child), child->common.function_name->val, zend_visibility_string(parent_flags), ZEND_FN_SCOPE_NAME(parent), (parent_flags&ZEND_ACC_PUBLIC) ? "" : " or weaker");
} else if (((child_flags & ZEND_ACC_PPP_MASK) < (parent_flags & ZEND_ACC_PPP_MASK))
&& ((parent_flags & ZEND_ACC_PPP_MASK) & ZEND_ACC_PRIVATE)) {
child->common.fn_flags |= ZEND_ACC_CHANGED;
@@ -3566,7 +3566,7 @@ static void do_inheritance_check_on_method(zend_function *child, zend_function *
if (child->common.prototype && (child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT)) {
if (!zend_do_perform_implementation_check(child, child->common.prototype TSRMLS_CC)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name, zend_get_function_declaration(child->common.prototype TSRMLS_CC));
+ zend_error_noreturn(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with %s", ZEND_FN_SCOPE_NAME(child), child->common.function_name->val, zend_get_function_declaration(child->common.prototype TSRMLS_CC));
}
} else if (EG(error_reporting) & E_STRICT || Z_TYPE(EG(user_error_handler)) != IS_UNDEF) { /* Check E_STRICT (or custom error handler) before the check so that we save some time */
if (!zend_do_perform_implementation_check(child, parent TSRMLS_CC)) {
@@ -3718,10 +3718,10 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
if ((ce->ce_flags & ZEND_ACC_INTERFACE)
&& !(parent_ce->ce_flags & ZEND_ACC_INTERFACE)) {
- zend_error_noreturn(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ce->name, parent_ce->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Interface %s may not inherit from class (%s)", ce->name->val, parent_ce->name->val);
}
if (parent_ce->ce_flags & ZEND_ACC_FINAL_CLASS) {
- zend_error_noreturn(E_COMPILE_ERROR, "Class %s may not inherit from final class (%s)", ce->name, parent_ce->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Class %s may not inherit from final class (%s)", ce->name->val, parent_ce->name->val);
}
ce->parent = parent_ce;
@@ -3875,7 +3875,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
if (i < parent_iface_num) {
ignore = 1;
} else {
- zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->name, iface->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot implement previously implemented interface %s", ce->name->val, iface->name->val);
}
}
}
@@ -4035,12 +4035,12 @@ static void zend_add_trait_method(zend_class_entry *ce, const char *name, zend_s
/* two traits can't define the same non-abstract method */
#if 1
zend_error_noreturn(E_COMPILE_ERROR, "Trait method %s has not been applied, because there are collisions with other trait methods on %s",
- name, ce->name);
+ name, ce->name->val);
#else /* TODO: better error message */
zend_error_noreturn(E_COMPILE_ERROR, "Trait method %s::%s has not been applied as %s::%s, because of collision with %s::%s",
- fn->common.scope->name, fn->common.function_name,
- ce->name, name,
- existing_fn->common.scope->name, existing_fn->common.function_name);
+ fn->common.scope->name->val, fn->common.function_name->val,
+ ce->name->val, name,
+ existing_fn->common.scope->name->val, existing_fn->common.function_name->val);
#endif
} else {
/* inherited members are overridden by members inserted by traits */
@@ -4172,7 +4172,7 @@ static void zend_check_trait_usage(zend_class_entry *ce, zend_class_entry *trait
return;
}
}
- zend_error_noreturn(E_COMPILE_ERROR, "Required Trait %s wasn't added to %s", trait->name, ce->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Required Trait %s wasn't added to %s", trait->name->val, ce->name->val);
}
/* }}} */
@@ -4267,7 +4267,7 @@ static void zend_traits_init_trait_structures(zend_class_entry *ce TSRMLS_DC) /*
STR_FREE(lcname);
if (!method_exists) {
- zend_error_noreturn(E_COMPILE_ERROR, "An alias was defined for %s::%s but this method does not exist", cur_method_ref->ce->name, cur_method_ref->method_name);
+ zend_error_noreturn(E_COMPILE_ERROR, "An alias was defined for %s::%s but this method does not exist", cur_method_ref->ce->name->val, cur_method_ref->method_name);
}
}
i++;
@@ -4701,9 +4701,9 @@ ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array
}
if (parent_ce->ce_flags & ZEND_ACC_INTERFACE) {
- zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from interface %s", ce->name, parent_ce->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from interface %s", ce->name->val, parent_ce->name->val);
} else if ((parent_ce->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
- zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from trait %s", ce->name, parent_ce->name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Class %s cannot extend from trait %s", ce->name->val, parent_ce->name->val);
}
zend_do_inheritance(ce, parent_ce TSRMLS_CC);
@@ -5192,19 +5192,19 @@ void zend_do_end_class_declaration(const znode *class_token, const znode *parent
if (ce->constructor) {
ce->constructor->common.fn_flags |= ZEND_ACC_CTOR;
if (ce->constructor->common.fn_flags & ZEND_ACC_STATIC) {
- zend_error_noreturn(E_COMPILE_ERROR, "Constructor %s::%s() cannot be static", ce->name, ce->constructor->common.function_name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Constructor %s::%s() cannot be static", ce->name->val, ce->constructor->common.function_name->val);
}
}
if (ce->destructor) {
ce->destructor->common.fn_flags |= ZEND_ACC_DTOR;
if (ce->destructor->common.fn_flags & ZEND_ACC_STATIC) {
- zend_error_noreturn(E_COMPILE_ERROR, "Destructor %s::%s() cannot be static", ce->name, ce->destructor->common.function_name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Destructor %s::%s() cannot be static", ce->name->val, ce->destructor->common.function_name->val);
}
}
if (ce->clone) {
ce->clone->common.fn_flags |= ZEND_ACC_CLONE;
if (ce->clone->common.fn_flags & ZEND_ACC_STATIC) {
- zend_error_noreturn(E_COMPILE_ERROR, "Clone method %s::%s() cannot be static", ce->name, ce->clone->common.function_name);
+ zend_error_noreturn(E_COMPILE_ERROR, "Clone method %s::%s() cannot be static", ce->name->val, ce->clone->common.function_name->val);
}
}
@@ -5255,7 +5255,7 @@ void zend_do_implements_interface(znode *interface_name TSRMLS_DC) /* {{{ */
if ((CG(active_class_entry)->ce_flags & ZEND_ACC_TRAIT) == ZEND_ACC_TRAIT) {
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use '%s' as interface on '%s' since it is a Trait",
Z_STRVAL(interface_name->u.constant),
- CG(active_class_entry)->name);
+ CG(active_class_entry)->name->val);
}
switch (zend_get_class_fetch_type(Z_STRVAL(interface_name->u.constant), Z_STRLEN(interface_name->u.constant))) {
@@ -5286,7 +5286,7 @@ void zend_do_use_trait(znode *trait_name TSRMLS_DC) /* {{{ */
if ((CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE)) {
zend_error_noreturn(E_COMPILE_ERROR,
"Cannot use traits inside of interfaces. %s is used in %s",
- Z_STRVAL(trait_name->u.constant), CG(active_class_entry)->name);
+ Z_STRVAL(trait_name->u.constant), CG(active_class_entry)->name->val);
}
diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c
index 20ca452b5a..ce0713f4dd 100644
--- a/Zend/zend_language_scanner.c
+++ b/Zend/zend_language_scanner.c
@@ -1094,7 +1094,7 @@ yyc_INITIAL:
yy3:
YYDEBUG(3, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1754 "Zend/zend_language_scanner.l"
+#line 1761 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -1171,7 +1171,7 @@ yy5:
yy6:
YYDEBUG(6, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1744 "Zend/zend_language_scanner.l"
+#line 1751 "Zend/zend_language_scanner.l"
{
if (CG(short_tags)) {
ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1188,7 +1188,7 @@ yy7:
if ((yych = *YYCURSOR) == '=') goto yy43;
YYDEBUG(8, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1723 "Zend/zend_language_scanner.l"
+#line 1730 "Zend/zend_language_scanner.l"
{
if (CG(asp_tags)) {
//??? ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1385,7 +1385,7 @@ yy35:
++YYCURSOR;
YYDEBUG(38, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1686 "Zend/zend_language_scanner.l"
+#line 1693 "Zend/zend_language_scanner.l"
{
YYCTYPE *bracket = (YYCTYPE*)zend_memrchr(yytext, '<', yyleng - (sizeof("script language=php>") - 1));
@@ -1428,7 +1428,7 @@ yy43:
++YYCURSOR;
YYDEBUG(44, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1703 "Zend/zend_language_scanner.l"
+#line 1710 "Zend/zend_language_scanner.l"
{
if (CG(asp_tags)) {
//??? ZVAL_STRINGL(zendlval, yytext, yyleng);
@@ -1445,7 +1445,7 @@ yy45:
++YYCURSOR;
YYDEBUG(46, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1715 "Zend/zend_language_scanner.l"
+#line 1722 "Zend/zend_language_scanner.l"
{
//??? ZVAL_STRINGL(zendlval, yytext, yyleng);
ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */
@@ -1479,7 +1479,7 @@ yy50:
yy51:
YYDEBUG(51, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1735 "Zend/zend_language_scanner.l"
+#line 1742 "Zend/zend_language_scanner.l"
{
//??? ZVAL_STRINGL(zendlval, yytext, yyleng);
ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way, no copying intentional */
@@ -1558,7 +1558,7 @@ yyc_ST_BACKQUOTE:
yy56:
YYDEBUG(56, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2194 "Zend/zend_language_scanner.l"
+#line 2201 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -1610,7 +1610,7 @@ yy58:
++YYCURSOR;
YYDEBUG(59, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2138 "Zend/zend_language_scanner.l"
+#line 2145 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return '`';
@@ -1625,7 +1625,7 @@ yy61:
++YYCURSOR;
YYDEBUG(62, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2132 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1648,7 +1648,7 @@ yy63:
yy65:
YYDEBUG(65, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1833 "Zend/zend_language_scanner.l"
+#line 1840 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
return T_VARIABLE;
@@ -1678,7 +1678,7 @@ yy70:
++YYCURSOR;
YYDEBUG(71, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1826 "Zend/zend_language_scanner.l"
+#line 1833 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1703,7 +1703,7 @@ yy73:
++YYCURSOR;
YYDEBUG(74, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1817 "Zend/zend_language_scanner.l"
+#line 1824 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1778,7 +1778,7 @@ yy77:
yy78:
YYDEBUG(78, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2144 "Zend/zend_language_scanner.l"
+#line 2151 "Zend/zend_language_scanner.l"
{
if (GET_DOUBLE_QUOTES_SCANNED_LENGTH()) {
YYCURSOR += GET_DOUBLE_QUOTES_SCANNED_LENGTH() - 1;
@@ -1838,7 +1838,7 @@ yy80:
++YYCURSOR;
YYDEBUG(81, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2133 "Zend/zend_language_scanner.l"
+#line 2140 "Zend/zend_language_scanner.l"
{
BEGIN(ST_IN_SCRIPTING);
return '"';
@@ -1853,7 +1853,7 @@ yy83:
++YYCURSOR;
YYDEBUG(84, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2132 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -1876,7 +1876,7 @@ yy85:
yy87:
YYDEBUG(87, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1833 "Zend/zend_language_scanner.l"
+#line 1840 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
return T_VARIABLE;
@@ -1906,7 +1906,7 @@ yy92:
++YYCURSOR;
YYDEBUG(93, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1826 "Zend/zend_language_scanner.l"
+#line 1833 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -1931,7 +1931,7 @@ yy95:
++YYCURSOR;
YYDEBUG(96, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1817 "Zend/zend_language_scanner.l"
+#line 1824 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -1949,7 +1949,7 @@ yyc_ST_END_HEREDOC:
++YYCURSOR;
YYDEBUG(100, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2111 "Zend/zend_language_scanner.l"
+#line 2118 "Zend/zend_language_scanner.l"
{
zend_heredoc_label *heredoc_label = zend_ptr_stack_pop(&SCNG(heredoc_label_stack));
@@ -2024,7 +2024,7 @@ yy103:
yy104:
YYDEBUG(104, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2236 "Zend/zend_language_scanner.l"
+#line 2243 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -2112,7 +2112,7 @@ yy107:
++YYCURSOR;
YYDEBUG(108, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2125 "Zend/zend_language_scanner.l"
+#line 2132 "Zend/zend_language_scanner.l"
{
Z_LVAL_P(zendlval) = (long) '{';
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
@@ -2135,7 +2135,7 @@ yy109:
yy111:
YYDEBUG(111, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1833 "Zend/zend_language_scanner.l"
+#line 1840 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
return T_VARIABLE;
@@ -2165,7 +2165,7 @@ yy116:
++YYCURSOR;
YYDEBUG(117, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1826 "Zend/zend_language_scanner.l"
+#line 1833 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 1);
yy_push_state(ST_VAR_OFFSET TSRMLS_CC);
@@ -2190,7 +2190,7 @@ yy119:
++YYCURSOR;
YYDEBUG(120, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1817 "Zend/zend_language_scanner.l"
+#line 1824 "Zend/zend_language_scanner.l"
{
yyless(yyleng - 3);
yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
@@ -2380,7 +2380,7 @@ yy123:
yy124:
YYDEBUG(124, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1855 "Zend/zend_language_scanner.l"
+#line 1862 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
return T_STRING;
@@ -2981,7 +2981,7 @@ yy176:
yy177:
YYDEBUG(177, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1861 "Zend/zend_language_scanner.l"
+#line 1868 "Zend/zend_language_scanner.l"
{
while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR++) {
@@ -3022,7 +3022,7 @@ yy178:
yy179:
YYDEBUG(179, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1948 "Zend/zend_language_scanner.l"
+#line 1955 "Zend/zend_language_scanner.l"
{
register char *s, *t;
char *end;
@@ -3095,7 +3095,7 @@ yy180:
yy181:
YYDEBUG(181, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2015 "Zend/zend_language_scanner.l"
+#line 2022 "Zend/zend_language_scanner.l"
{
int bprefix = (yytext[0] != '"') ? 1 : 0;
@@ -3142,7 +3142,7 @@ yy182:
++YYCURSOR;
YYDEBUG(183, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2105 "Zend/zend_language_scanner.l"
+#line 2112 "Zend/zend_language_scanner.l"
{
BEGIN(ST_BACKQUOTE);
return '`';
@@ -3153,7 +3153,7 @@ yy184:
++YYCURSOR;
YYDEBUG(185, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2367 "Zend/zend_language_scanner.l"
+#line 2374 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -3355,7 +3355,7 @@ yy206:
yy207:
YYDEBUG(207, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1928 "Zend/zend_language_scanner.l"
+#line 1935 "Zend/zend_language_scanner.l"
{
//??? ZVAL_STRINGL(zendlval, yytext, yyleng);
ZVAL_STR(zendlval, STR_EMPTY_ALLOC()); /* tricky way to no copying - intentional */
@@ -3396,7 +3396,7 @@ yy210:
yy212:
YYDEBUG(212, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1833 "Zend/zend_language_scanner.l"
+#line 1840 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
return T_VARIABLE;
@@ -3491,7 +3491,7 @@ yy228:
yy229:
YYDEBUG(229, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1936 "Zend/zend_language_scanner.l"
+#line 1943 "Zend/zend_language_scanner.l"
{
if (CG(asp_tags)) {
BEGIN(INITIAL);
@@ -3530,7 +3530,7 @@ yy234:
yy235:
YYDEBUG(235, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1895 "Zend/zend_language_scanner.l"
+#line 1902 "Zend/zend_language_scanner.l"
{
int doc_com;
@@ -3837,7 +3837,7 @@ yy275:
yy276:
YYDEBUG(276, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2057 "Zend/zend_language_scanner.l"
+#line 2064 "Zend/zend_language_scanner.l"
{
char *s;
int bprefix = (yytext[0] != '<') ? 1 : 0;
@@ -4132,7 +4132,7 @@ yy313:
}
YYDEBUG(316, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1677 "Zend/zend_language_scanner.l"
+#line 1684 "Zend/zend_language_scanner.l"
{
if (Z_TYPE(CG(current_namespace)) != IS_UNDEF) {
ZVAL_DUP(zendlval, &CG(current_namespace));
@@ -4161,7 +4161,7 @@ yy318:
}
YYDEBUG(321, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1652 "Zend/zend_language_scanner.l"
+#line 1659 "Zend/zend_language_scanner.l"
{
zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
zend_string *dirname;
@@ -4211,7 +4211,7 @@ yy324:
}
YYDEBUG(327, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1637 "Zend/zend_language_scanner.l"
+#line 1644 "Zend/zend_language_scanner.l"
{
ZVAL_LONG(zendlval, CG(zend_lineno));
return T_LINE;
@@ -4251,30 +4251,38 @@ yy332:
}
YYDEBUG(335, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1614 "Zend/zend_language_scanner.l"
- {
- const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name->val : NULL;
- const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name->val : NULL;
-//???
-// Z_STRLEN_P(zendlval) = zend_spprintf((char**)&Z_STRVAL_P(zendlval), 0, "%s%s%s",
-// class_name ? class_name : "",
-// class_name && func_name ? "::" : "",
-// func_name ? func_name : ""
-// );
-// zendlval->type = IS_STRING;
- char *method_name;
- int method_len;
-
- method_len = zend_spprintf(&method_name, 0, "%s%s%s",
- class_name ? class_name : "",
- class_name && func_name ? "::" : "",
- func_name ? func_name : ""
- );
- ZVAL_STRINGL(zendlval, method_name, method_len);
- efree(method_name);
+#line 1613 "Zend/zend_language_scanner.l"
+ {
+ if (CG(active_class_entry)) {
+ int len = 2;
+
+ if (CG(active_class_entry)->name) {
+ len += CG(active_class_entry)->name->len;
+ }
+ if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ len += CG(active_op_array)->function_name->len;
+ }
+ ZVAL_STR(zendlval, STR_ALLOC(len, 0));
+ len = 0;
+ if (CG(active_class_entry)->name) {
+ memcpy(Z_STRVAL_P(zendlval), CG(active_class_entry)->name->val, CG(active_class_entry)->name->len);
+ len += CG(active_class_entry)->name->len;
+ }
+ memcpy(Z_STRVAL_P(zendlval) + len, "::", sizeof("::")-1);
+ len += sizeof("::")-1;
+ if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ memcpy(Z_STRVAL_P(zendlval) + len, CG(active_op_array)->function_name->val, CG(active_op_array)->function_name->len);
+ len += CG(active_op_array)->function_name->len;
+ }
+ Z_STRVAL_P(zendlval)[len] = 0;
+ } else if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ ZVAL_STR(zendlval, STR_COPY(CG(active_op_array)->function_name));
+ } else {
+ ZVAL_EMPTY_STRING(zendlval);
+ }
return T_METHOD_C;
}
-#line 4278 "Zend/zend_language_scanner.c"
+#line 4286 "Zend/zend_language_scanner.c"
yy336:
YYDEBUG(336, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4329,14 +4337,13 @@ yy343:
{
zend_op_array *op_array = CG(active_op_array);
if (op_array && op_array->function_name) {
- ZVAL_STR(zendlval, op_array->function_name);
- Z_ADDREF_P(zendlval);
+ ZVAL_STR(zendlval, STR_COPY(op_array->function_name));
} else {
ZVAL_EMPTY_STRING(zendlval);
}
return T_FUNC_C;
}
-#line 4340 "Zend/zend_language_scanner.c"
+#line 4347 "Zend/zend_language_scanner.c"
yy347:
YYDEBUG(347, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4356,7 +4363,7 @@ yy348:
}
YYDEBUG(351, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1642 "Zend/zend_language_scanner.l"
+#line 1649 "Zend/zend_language_scanner.l"
{
zend_string *filename = zend_get_compiled_filename(TSRMLS_C);
@@ -4366,7 +4373,7 @@ yy348:
ZVAL_STR(zendlval, filename);
return T_FILE;
}
-#line 4370 "Zend/zend_language_scanner.c"
+#line 4377 "Zend/zend_language_scanner.c"
yy352:
YYDEBUG(352, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4407,7 +4414,7 @@ yy355:
}
return T_TRAIT_C;
}
-#line 4411 "Zend/zend_language_scanner.c"
+#line 4418 "Zend/zend_language_scanner.c"
yy359:
YYDEBUG(359, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4455,7 +4462,7 @@ yy362:
}
return T_CLASS_C;
}
-#line 4459 "Zend/zend_language_scanner.c"
+#line 4466 "Zend/zend_language_scanner.c"
yy366:
YYDEBUG(366, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4521,7 +4528,7 @@ yy377:
{
return T_HALT_COMPILER;
}
-#line 4525 "Zend/zend_language_scanner.c"
+#line 4532 "Zend/zend_language_scanner.c"
yy379:
YYDEBUG(379, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4545,7 +4552,7 @@ yy381:
{
return T_USE;
}
-#line 4549 "Zend/zend_language_scanner.c"
+#line 4556 "Zend/zend_language_scanner.c"
yy383:
YYDEBUG(383, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4568,7 +4575,7 @@ yy385:
{
return T_UNSET;
}
-#line 4572 "Zend/zend_language_scanner.c"
+#line 4579 "Zend/zend_language_scanner.c"
yy387:
YYDEBUG(387, *YYCURSOR);
++YYCURSOR;
@@ -4744,7 +4751,7 @@ yy402:
{
return T_INT_CAST;
}
-#line 4748 "Zend/zend_language_scanner.c"
+#line 4755 "Zend/zend_language_scanner.c"
yy405:
YYDEBUG(405, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4792,7 +4799,7 @@ yy410:
{
return T_DOUBLE_CAST;
}
-#line 4796 "Zend/zend_language_scanner.c"
+#line 4803 "Zend/zend_language_scanner.c"
yy414:
YYDEBUG(414, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4866,7 +4873,7 @@ yy424:
{
return T_STRING_CAST;
}
-#line 4870 "Zend/zend_language_scanner.c"
+#line 4877 "Zend/zend_language_scanner.c"
yy428:
YYDEBUG(428, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4903,7 +4910,7 @@ yy431:
{
return T_ARRAY_CAST;
}
-#line 4907 "Zend/zend_language_scanner.c"
+#line 4914 "Zend/zend_language_scanner.c"
yy435:
YYDEBUG(435, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4945,7 +4952,7 @@ yy439:
{
return T_OBJECT_CAST;
}
-#line 4949 "Zend/zend_language_scanner.c"
+#line 4956 "Zend/zend_language_scanner.c"
yy443:
YYDEBUG(443, *YYCURSOR);
yych = *++YYCURSOR;
@@ -4990,7 +4997,7 @@ yy448:
{
return T_BOOL_CAST;
}
-#line 4994 "Zend/zend_language_scanner.c"
+#line 5001 "Zend/zend_language_scanner.c"
yy451:
YYDEBUG(451, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5054,7 +5061,7 @@ yy459:
{
return T_UNSET_CAST;
}
-#line 5058 "Zend/zend_language_scanner.c"
+#line 5065 "Zend/zend_language_scanner.c"
yy463:
YYDEBUG(463, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5072,7 +5079,7 @@ yy464:
{
return T_VAR;
}
-#line 5076 "Zend/zend_language_scanner.c"
+#line 5083 "Zend/zend_language_scanner.c"
yy466:
YYDEBUG(466, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5096,7 +5103,7 @@ yy468:
{
return T_NEW;
}
-#line 5100 "Zend/zend_language_scanner.c"
+#line 5107 "Zend/zend_language_scanner.c"
yy470:
YYDEBUG(470, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5139,7 +5146,7 @@ yy476:
{
return T_NAMESPACE;
}
-#line 5143 "Zend/zend_language_scanner.c"
+#line 5150 "Zend/zend_language_scanner.c"
yy478:
YYDEBUG(478, *YYCURSOR);
yyaccept = 3;
@@ -5165,7 +5172,7 @@ yy480:
{
return T_CONCAT_EQUAL;
}
-#line 5169 "Zend/zend_language_scanner.c"
+#line 5176 "Zend/zend_language_scanner.c"
yy482:
YYDEBUG(482, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5178,7 +5185,7 @@ yy482:
{
return T_ELLIPSIS;
}
-#line 5182 "Zend/zend_language_scanner.c"
+#line 5189 "Zend/zend_language_scanner.c"
yy485:
YYDEBUG(485, *YYCURSOR);
++YYCURSOR;
@@ -5188,7 +5195,7 @@ yy485:
{
return T_PAAMAYIM_NEKUDOTAYIM;
}
-#line 5192 "Zend/zend_language_scanner.c"
+#line 5199 "Zend/zend_language_scanner.c"
yy487:
YYDEBUG(487, *YYCURSOR);
++YYCURSOR;
@@ -5214,7 +5221,7 @@ yy489:
{
return T_MINUS_EQUAL;
}
-#line 5218 "Zend/zend_language_scanner.c"
+#line 5225 "Zend/zend_language_scanner.c"
yy491:
YYDEBUG(491, *YYCURSOR);
++YYCURSOR;
@@ -5224,7 +5231,7 @@ yy491:
{
return T_DEC;
}
-#line 5228 "Zend/zend_language_scanner.c"
+#line 5235 "Zend/zend_language_scanner.c"
yy493:
YYDEBUG(493, *YYCURSOR);
++YYCURSOR;
@@ -5235,7 +5242,7 @@ yy493:
yy_push_state(ST_LOOKING_FOR_PROPERTY TSRMLS_CC);
return T_OBJECT_OPERATOR;
}
-#line 5239 "Zend/zend_language_scanner.c"
+#line 5246 "Zend/zend_language_scanner.c"
yy495:
YYDEBUG(495, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5284,7 +5291,7 @@ yy500:
{
return T_PUBLIC;
}
-#line 5288 "Zend/zend_language_scanner.c"
+#line 5295 "Zend/zend_language_scanner.c"
yy502:
YYDEBUG(502, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5343,7 +5350,7 @@ yy509:
{
return T_PROTECTED;
}
-#line 5347 "Zend/zend_language_scanner.c"
+#line 5354 "Zend/zend_language_scanner.c"
yy511:
YYDEBUG(511, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5377,7 +5384,7 @@ yy515:
{
return T_PRIVATE;
}
-#line 5381 "Zend/zend_language_scanner.c"
+#line 5388 "Zend/zend_language_scanner.c"
yy517:
YYDEBUG(517, *YYCURSOR);
++YYCURSOR;
@@ -5390,7 +5397,7 @@ yy517:
{
return T_PRINT;
}
-#line 5394 "Zend/zend_language_scanner.c"
+#line 5401 "Zend/zend_language_scanner.c"
yy519:
YYDEBUG(519, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5419,7 +5426,7 @@ yy522:
{
return T_GOTO;
}
-#line 5423 "Zend/zend_language_scanner.c"
+#line 5430 "Zend/zend_language_scanner.c"
yy524:
YYDEBUG(524, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5447,7 +5454,7 @@ yy527:
{
return T_GLOBAL;
}
-#line 5451 "Zend/zend_language_scanner.c"
+#line 5458 "Zend/zend_language_scanner.c"
yy529:
YYDEBUG(529, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5488,7 +5495,7 @@ yy535:
{
return T_BREAK;
}
-#line 5492 "Zend/zend_language_scanner.c"
+#line 5499 "Zend/zend_language_scanner.c"
yy537:
YYDEBUG(537, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5532,7 +5539,7 @@ yy543:
{
return T_SWITCH;
}
-#line 5536 "Zend/zend_language_scanner.c"
+#line 5543 "Zend/zend_language_scanner.c"
yy545:
YYDEBUG(545, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5560,7 +5567,7 @@ yy548:
{
return T_STATIC;
}
-#line 5564 "Zend/zend_language_scanner.c"
+#line 5571 "Zend/zend_language_scanner.c"
yy550:
YYDEBUG(550, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5591,7 +5598,7 @@ yy553:
{
return T_AS;
}
-#line 5595 "Zend/zend_language_scanner.c"
+#line 5602 "Zend/zend_language_scanner.c"
yy555:
YYDEBUG(555, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5614,7 +5621,7 @@ yy557:
{
return T_ARRAY;
}
-#line 5618 "Zend/zend_language_scanner.c"
+#line 5625 "Zend/zend_language_scanner.c"
yy559:
YYDEBUG(559, *YYCURSOR);
++YYCURSOR;
@@ -5627,7 +5634,7 @@ yy559:
{
return T_LOGICAL_AND;
}
-#line 5631 "Zend/zend_language_scanner.c"
+#line 5638 "Zend/zend_language_scanner.c"
yy561:
YYDEBUG(561, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5665,7 +5672,7 @@ yy566:
{
return T_ABSTRACT;
}
-#line 5669 "Zend/zend_language_scanner.c"
+#line 5676 "Zend/zend_language_scanner.c"
yy568:
YYDEBUG(568, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5693,7 +5700,7 @@ yy571:
{
return T_WHILE;
}
-#line 5697 "Zend/zend_language_scanner.c"
+#line 5704 "Zend/zend_language_scanner.c"
yy573:
YYDEBUG(573, *YYCURSOR);
++YYCURSOR;
@@ -5706,7 +5713,7 @@ yy573:
{
return T_IF;
}
-#line 5710 "Zend/zend_language_scanner.c"
+#line 5717 "Zend/zend_language_scanner.c"
yy575:
YYDEBUG(575, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5762,7 +5769,7 @@ yy580:
{
return T_ISSET;
}
-#line 5766 "Zend/zend_language_scanner.c"
+#line 5773 "Zend/zend_language_scanner.c"
yy582:
YYDEBUG(582, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5820,7 +5827,7 @@ yy589:
{
return T_INCLUDE;
}
-#line 5824 "Zend/zend_language_scanner.c"
+#line 5831 "Zend/zend_language_scanner.c"
yy590:
YYDEBUG(590, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5853,7 +5860,7 @@ yy594:
{
return T_INCLUDE_ONCE;
}
-#line 5857 "Zend/zend_language_scanner.c"
+#line 5864 "Zend/zend_language_scanner.c"
yy596:
YYDEBUG(596, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5891,7 +5898,7 @@ yy601:
{
return T_INTERFACE;
}
-#line 5895 "Zend/zend_language_scanner.c"
+#line 5902 "Zend/zend_language_scanner.c"
yy603:
YYDEBUG(603, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5945,7 +5952,7 @@ yy609:
{
return T_INSTEADOF;
}
-#line 5949 "Zend/zend_language_scanner.c"
+#line 5956 "Zend/zend_language_scanner.c"
yy611:
YYDEBUG(611, *YYCURSOR);
yych = *++YYCURSOR;
@@ -5978,7 +5985,7 @@ yy615:
{
return T_INSTANCEOF;
}
-#line 5982 "Zend/zend_language_scanner.c"
+#line 5989 "Zend/zend_language_scanner.c"
yy617:
YYDEBUG(617, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6026,7 +6033,7 @@ yy624:
{
return T_IMPLEMENTS;
}
-#line 6030 "Zend/zend_language_scanner.c"
+#line 6037 "Zend/zend_language_scanner.c"
yy626:
YYDEBUG(626, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6058,7 +6065,7 @@ yy627:
{
return T_TRY;
}
-#line 6062 "Zend/zend_language_scanner.c"
+#line 6069 "Zend/zend_language_scanner.c"
yy630:
YYDEBUG(630, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6081,7 +6088,7 @@ yy632:
{
return T_TRAIT;
}
-#line 6085 "Zend/zend_language_scanner.c"
+#line 6092 "Zend/zend_language_scanner.c"
yy634:
YYDEBUG(634, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6104,7 +6111,7 @@ yy636:
{
return T_THROW;
}
-#line 6108 "Zend/zend_language_scanner.c"
+#line 6115 "Zend/zend_language_scanner.c"
yy638:
YYDEBUG(638, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6132,7 +6139,7 @@ yy641:
{
return T_YIELD;
}
-#line 6136 "Zend/zend_language_scanner.c"
+#line 6143 "Zend/zend_language_scanner.c"
yy643:
YYDEBUG(643, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6197,7 +6204,7 @@ yy650:
{
return T_REQUIRE;
}
-#line 6201 "Zend/zend_language_scanner.c"
+#line 6208 "Zend/zend_language_scanner.c"
yy651:
YYDEBUG(651, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6230,7 +6237,7 @@ yy655:
{
return T_REQUIRE_ONCE;
}
-#line 6234 "Zend/zend_language_scanner.c"
+#line 6241 "Zend/zend_language_scanner.c"
yy657:
YYDEBUG(657, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6253,7 +6260,7 @@ yy659:
{
return T_RETURN;
}
-#line 6257 "Zend/zend_language_scanner.c"
+#line 6264 "Zend/zend_language_scanner.c"
yy661:
YYDEBUG(661, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6347,7 +6354,7 @@ yy670:
{
return T_CONTINUE;
}
-#line 6351 "Zend/zend_language_scanner.c"
+#line 6358 "Zend/zend_language_scanner.c"
yy672:
YYDEBUG(672, *YYCURSOR);
++YYCURSOR;
@@ -6360,7 +6367,7 @@ yy672:
{
return T_CONST;
}
-#line 6364 "Zend/zend_language_scanner.c"
+#line 6371 "Zend/zend_language_scanner.c"
yy674:
YYDEBUG(674, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6389,7 +6396,7 @@ yy677:
{
return T_CLONE;
}
-#line 6393 "Zend/zend_language_scanner.c"
+#line 6400 "Zend/zend_language_scanner.c"
yy679:
YYDEBUG(679, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6407,7 +6414,7 @@ yy680:
{
return T_CLASS;
}
-#line 6411 "Zend/zend_language_scanner.c"
+#line 6418 "Zend/zend_language_scanner.c"
yy682:
YYDEBUG(682, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6457,7 +6464,7 @@ yy689:
{
return T_CALLABLE;
}
-#line 6461 "Zend/zend_language_scanner.c"
+#line 6468 "Zend/zend_language_scanner.c"
yy691:
YYDEBUG(691, *YYCURSOR);
++YYCURSOR;
@@ -6470,7 +6477,7 @@ yy691:
{
return T_CASE;
}
-#line 6474 "Zend/zend_language_scanner.c"
+#line 6481 "Zend/zend_language_scanner.c"
yy693:
YYDEBUG(693, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6488,7 +6495,7 @@ yy694:
{
return T_CATCH;
}
-#line 6492 "Zend/zend_language_scanner.c"
+#line 6499 "Zend/zend_language_scanner.c"
yy696:
YYDEBUG(696, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6543,7 +6550,7 @@ yy704:
{
return T_FUNCTION;
}
-#line 6547 "Zend/zend_language_scanner.c"
+#line 6554 "Zend/zend_language_scanner.c"
yy706:
YYDEBUG(706, *YYCURSOR);
++YYCURSOR;
@@ -6571,7 +6578,7 @@ yy707:
{
return T_FOR;
}
-#line 6575 "Zend/zend_language_scanner.c"
+#line 6582 "Zend/zend_language_scanner.c"
yy708:
YYDEBUG(708, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6599,7 +6606,7 @@ yy711:
{
return T_FOREACH;
}
-#line 6603 "Zend/zend_language_scanner.c"
+#line 6610 "Zend/zend_language_scanner.c"
yy713:
YYDEBUG(713, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6637,7 +6644,7 @@ yy716:
{
return T_FINAL;
}
-#line 6641 "Zend/zend_language_scanner.c"
+#line 6648 "Zend/zend_language_scanner.c"
yy717:
YYDEBUG(717, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6655,7 +6662,7 @@ yy718:
{
return T_FINALLY;
}
-#line 6659 "Zend/zend_language_scanner.c"
+#line 6666 "Zend/zend_language_scanner.c"
yy720:
YYDEBUG(720, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6690,7 +6697,7 @@ yy722:
{
return T_DO;
}
-#line 6694 "Zend/zend_language_scanner.c"
+#line 6701 "Zend/zend_language_scanner.c"
yy724:
YYDEBUG(724, *YYCURSOR);
++YYCURSOR;
@@ -6703,7 +6710,7 @@ yy724:
{
return T_EXIT;
}
-#line 6707 "Zend/zend_language_scanner.c"
+#line 6714 "Zend/zend_language_scanner.c"
yy726:
YYDEBUG(726, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6742,7 +6749,7 @@ yy731:
{
return T_DEFAULT;
}
-#line 6746 "Zend/zend_language_scanner.c"
+#line 6753 "Zend/zend_language_scanner.c"
yy733:
YYDEBUG(733, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6770,7 +6777,7 @@ yy736:
{
return T_DECLARE;
}
-#line 6774 "Zend/zend_language_scanner.c"
+#line 6781 "Zend/zend_language_scanner.c"
yy738:
YYDEBUG(738, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6854,7 +6861,7 @@ yy749:
{
return T_EXTENDS;
}
-#line 6858 "Zend/zend_language_scanner.c"
+#line 6865 "Zend/zend_language_scanner.c"
yy751:
YYDEBUG(751, *YYCURSOR);
++YYCURSOR;
@@ -6867,7 +6874,7 @@ yy751:
{
return T_EXIT;
}
-#line 6871 "Zend/zend_language_scanner.c"
+#line 6878 "Zend/zend_language_scanner.c"
yy753:
YYDEBUG(753, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6885,7 +6892,7 @@ yy754:
{
return T_EVAL;
}
-#line 6889 "Zend/zend_language_scanner.c"
+#line 6896 "Zend/zend_language_scanner.c"
yy756:
YYDEBUG(756, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6959,7 +6966,7 @@ yy765:
{
return T_ENDWHILE;
}
-#line 6963 "Zend/zend_language_scanner.c"
+#line 6970 "Zend/zend_language_scanner.c"
yy767:
YYDEBUG(767, *YYCURSOR);
yych = *++YYCURSOR;
@@ -6992,7 +6999,7 @@ yy771:
{
return T_ENDSWITCH;
}
-#line 6996 "Zend/zend_language_scanner.c"
+#line 7003 "Zend/zend_language_scanner.c"
yy773:
YYDEBUG(773, *YYCURSOR);
++YYCURSOR;
@@ -7005,7 +7012,7 @@ yy773:
{
return T_ENDIF;
}
-#line 7009 "Zend/zend_language_scanner.c"
+#line 7016 "Zend/zend_language_scanner.c"
yy775:
YYDEBUG(775, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7038,7 +7045,7 @@ yy777:
{
return T_ENDFOR;
}
-#line 7042 "Zend/zend_language_scanner.c"
+#line 7049 "Zend/zend_language_scanner.c"
yy778:
YYDEBUG(778, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7066,7 +7073,7 @@ yy781:
{
return T_ENDFOREACH;
}
-#line 7070 "Zend/zend_language_scanner.c"
+#line 7077 "Zend/zend_language_scanner.c"
yy783:
YYDEBUG(783, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7104,7 +7111,7 @@ yy788:
{
return T_ENDDECLARE;
}
-#line 7108 "Zend/zend_language_scanner.c"
+#line 7115 "Zend/zend_language_scanner.c"
yy790:
YYDEBUG(790, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7127,7 +7134,7 @@ yy792:
{
return T_EMPTY;
}
-#line 7131 "Zend/zend_language_scanner.c"
+#line 7138 "Zend/zend_language_scanner.c"
yy794:
YYDEBUG(794, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7160,7 +7167,7 @@ yy796:
{
return T_ELSE;
}
-#line 7164 "Zend/zend_language_scanner.c"
+#line 7171 "Zend/zend_language_scanner.c"
yy797:
YYDEBUG(797, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7178,7 +7185,7 @@ yy798:
{
return T_ELSEIF;
}
-#line 7182 "Zend/zend_language_scanner.c"
+#line 7189 "Zend/zend_language_scanner.c"
yy800:
YYDEBUG(800, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7196,7 +7203,7 @@ yy801:
{
return T_ECHO;
}
-#line 7200 "Zend/zend_language_scanner.c"
+#line 7207 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_LOOKING_FOR_PROPERTY:
@@ -7276,7 +7283,7 @@ yy806:
HANDLE_NEWLINES(yytext, yyleng);
return T_WHITESPACE;
}
-#line 7280 "Zend/zend_language_scanner.c"
+#line 7287 "Zend/zend_language_scanner.c"
yy807:
YYDEBUG(807, *YYCURSOR);
++YYCURSOR;
@@ -7290,7 +7297,7 @@ yy808:
yy_pop_state(TSRMLS_C);
goto restart;
}
-#line 7294 "Zend/zend_language_scanner.c"
+#line 7301 "Zend/zend_language_scanner.c"
yy809:
YYDEBUG(809, *YYCURSOR);
++YYCURSOR;
@@ -7305,7 +7312,7 @@ yy810:
zend_copy_value(zendlval, yytext, yyleng);
return T_STRING;
}
-#line 7309 "Zend/zend_language_scanner.c"
+#line 7316 "Zend/zend_language_scanner.c"
yy811:
YYDEBUG(811, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7330,7 +7337,7 @@ yy814:
{
return T_OBJECT_OPERATOR;
}
-#line 7334 "Zend/zend_language_scanner.c"
+#line 7341 "Zend/zend_language_scanner.c"
yy816:
YYDEBUG(816, *YYCURSOR);
++YYCURSOR;
@@ -7422,7 +7429,7 @@ yy821:
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
goto restart;
}
-#line 7426 "Zend/zend_language_scanner.c"
+#line 7433 "Zend/zend_language_scanner.c"
yy822:
YYDEBUG(822, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7455,7 +7462,7 @@ yy826:
yy_push_state(ST_IN_SCRIPTING TSRMLS_CC);
return T_STRING_VARNAME;
}
-#line 7459 "Zend/zend_language_scanner.c"
+#line 7466 "Zend/zend_language_scanner.c"
}
/* *********************************** */
yyc_ST_NOWDOC:
@@ -7466,7 +7473,7 @@ yyc_ST_NOWDOC:
++YYCURSOR;
YYDEBUG(831, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2310 "Zend/zend_language_scanner.l"
+#line 2317 "Zend/zend_language_scanner.l"
{
int newline = 0;
@@ -7522,7 +7529,7 @@ nowdoc_scan_done:
HANDLE_NEWLINES(yytext, yyleng - newline);
return T_ENCAPSED_AND_WHITESPACE;
}
-#line 7526 "Zend/zend_language_scanner.c"
+#line 7533 "Zend/zend_language_scanner.c"
/* *********************************** */
yyc_ST_VAR_OFFSET:
{
@@ -7638,7 +7645,7 @@ yy835:
}
return T_NUM_STRING;
}
-#line 7642 "Zend/zend_language_scanner.c"
+#line 7649 "Zend/zend_language_scanner.c"
yy836:
YYDEBUG(836, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7658,23 +7665,23 @@ yy837:
yy838:
YYDEBUG(838, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1843 "Zend/zend_language_scanner.l"
+#line 1850 "Zend/zend_language_scanner.l"
{
/* Only '[' can be valid, but returning other tokens will allow a more explicit parse error */
return yytext[0];
}
-#line 7667 "Zend/zend_language_scanner.c"
+#line 7674 "Zend/zend_language_scanner.c"
yy839:
YYDEBUG(839, *YYCURSOR);
++YYCURSOR;
YYDEBUG(840, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1838 "Zend/zend_language_scanner.l"
+#line 1845 "Zend/zend_language_scanner.l"
{
yy_pop_state(TSRMLS_C);
return ']';
}
-#line 7678 "Zend/zend_language_scanner.c"
+#line 7685 "Zend/zend_language_scanner.c"
yy841:
YYDEBUG(841, *YYCURSOR);
yych = *++YYCURSOR;
@@ -7684,14 +7691,14 @@ yy842:
++YYCURSOR;
YYDEBUG(843, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1848 "Zend/zend_language_scanner.l"
+#line 1855 "Zend/zend_language_scanner.l"
{
/* Invalid rule to return a more explicit parse error with proper line number */
yyless(0);
yy_pop_state(TSRMLS_C);
return T_ENCAPSED_AND_WHITESPACE;
}
-#line 7695 "Zend/zend_language_scanner.c"
+#line 7702 "Zend/zend_language_scanner.c"
yy844:
YYDEBUG(844, *YYCURSOR);
++YYCURSOR;
@@ -7700,18 +7707,18 @@ yy844:
yy845:
YYDEBUG(845, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1855 "Zend/zend_language_scanner.l"
+#line 1862 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, yytext, yyleng);
return T_STRING;
}
-#line 7709 "Zend/zend_language_scanner.c"
+#line 7716 "Zend/zend_language_scanner.c"
yy846:
YYDEBUG(846, *YYCURSOR);
++YYCURSOR;
YYDEBUG(847, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 2367 "Zend/zend_language_scanner.l"
+#line 2374 "Zend/zend_language_scanner.l"
{
if (YYCURSOR > YYLIMIT) {
return 0;
@@ -7720,7 +7727,7 @@ yy846:
zend_error(E_COMPILE_WARNING,"Unexpected character in input: '%c' (ASCII=%d) state=%d", yytext[0], yytext[0], YYSTATE);
goto restart;
}
-#line 7724 "Zend/zend_language_scanner.c"
+#line 7731 "Zend/zend_language_scanner.c"
yy848:
YYDEBUG(848, *YYCURSOR);
++YYCURSOR;
@@ -7756,12 +7763,12 @@ yy850:
yy852:
YYDEBUG(852, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text);
-#line 1833 "Zend/zend_language_scanner.l"
+#line 1840 "Zend/zend_language_scanner.l"
{
zend_copy_value(zendlval, (yytext+1), (yyleng-1));
return T_VARIABLE;
}
-#line 7765 "Zend/zend_language_scanner.c"
+#line 7772 "Zend/zend_language_scanner.c"
yy853:
YYDEBUG(853, *YYCURSOR);
++YYCURSOR;
@@ -7806,7 +7813,7 @@ yy860:
ZVAL_STRINGL(zendlval, yytext, yyleng);
return T_NUM_STRING;
}
-#line 7810 "Zend/zend_language_scanner.c"
+#line 7817 "Zend/zend_language_scanner.c"
yy861:
YYDEBUG(861, *YYCURSOR);
++YYCURSOR;
@@ -7829,6 +7836,6 @@ yy863:
goto yy860;
}
}
-#line 2376 "Zend/zend_language_scanner.l"
+#line 2383 "Zend/zend_language_scanner.l"
}
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l
index c564648dab..77062eb121 100644
--- a/Zend/zend_language_scanner.l
+++ b/Zend/zend_language_scanner.l
@@ -1603,8 +1603,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
<ST_IN_SCRIPTING>"__FUNCTION__" {
zend_op_array *op_array = CG(active_op_array);
if (op_array && op_array->function_name) {
- ZVAL_STR(zendlval, op_array->function_name);
- Z_ADDREF_P(zendlval);
+ ZVAL_STR(zendlval, STR_COPY(op_array->function_name));
} else {
ZVAL_EMPTY_STRING(zendlval);
}
@@ -1612,25 +1611,33 @@ NEWLINE ("\r"|"\n"|"\r\n")
}
<ST_IN_SCRIPTING>"__METHOD__" {
- const char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name->val : NULL;
- const char *func_name = CG(active_op_array)? CG(active_op_array)->function_name->val : NULL;
-//???
-// Z_STRLEN_P(zendlval) = zend_spprintf((char**)&Z_STRVAL_P(zendlval), 0, "%s%s%s",
-// class_name ? class_name : "",
-// class_name && func_name ? "::" : "",
-// func_name ? func_name : ""
-// );
-// zendlval->type = IS_STRING;
- char *method_name;
- int method_len;
-
- method_len = zend_spprintf(&method_name, 0, "%s%s%s",
- class_name ? class_name : "",
- class_name && func_name ? "::" : "",
- func_name ? func_name : ""
- );
- ZVAL_STRINGL(zendlval, method_name, method_len);
- efree(method_name);
+ if (CG(active_class_entry)) {
+ int len = 2;
+
+ if (CG(active_class_entry)->name) {
+ len += CG(active_class_entry)->name->len;
+ }
+ if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ len += CG(active_op_array)->function_name->len;
+ }
+ ZVAL_STR(zendlval, STR_ALLOC(len, 0));
+ len = 0;
+ if (CG(active_class_entry)->name) {
+ memcpy(Z_STRVAL_P(zendlval), CG(active_class_entry)->name->val, CG(active_class_entry)->name->len);
+ len += CG(active_class_entry)->name->len;
+ }
+ memcpy(Z_STRVAL_P(zendlval) + len, "::", sizeof("::")-1);
+ len += sizeof("::")-1;
+ if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ memcpy(Z_STRVAL_P(zendlval) + len, CG(active_op_array)->function_name->val, CG(active_op_array)->function_name->len);
+ len += CG(active_op_array)->function_name->len;
+ }
+ Z_STRVAL_P(zendlval)[len] = 0;
+ } else if (CG(active_op_array) && CG(active_op_array)->function_name) {
+ ZVAL_STR(zendlval, STR_COPY(CG(active_op_array)->function_name));
+ } else {
+ ZVAL_EMPTY_STRING(zendlval);
+ }
return T_METHOD_C;
}
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 75acee396d..0ecc36e7cd 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -3794,7 +3794,7 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
if (resolved_path) {
-//??? failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+ failure_retval = zend_hash_str_exists(&EG(included_files), resolved_path, strlen(resolved_path));
} else {
resolved_path = Z_STRVAL_P(inc_filename);
}
@@ -3807,13 +3807,13 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
file_handle.opened_path = estrdup(resolved_path);
}
-//??? if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-//??? new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-//??? zend_destroy_file_handle(&file_handle TSRMLS_CC);
-//??? } else {
-//??? zend_file_handle_dtor(&file_handle TSRMLS_CC);
-//??? failure_retval=1;
-//??? }
+ if (zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path))) {
+ new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+ zend_destroy_file_handle(&file_handle TSRMLS_CC);
+ } else {
+ zend_file_handle_dtor(&file_handle TSRMLS_CC);
+ failure_retval=1;
+ }
} else {
if (opline->extended_value == ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 9aaa17c484..fe0f5e0b69 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -2851,7 +2851,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
if (resolved_path) {
-//??? failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+ failure_retval = zend_hash_str_exists(&EG(included_files), resolved_path, strlen(resolved_path));
} else {
resolved_path = Z_STRVAL_P(inc_filename);
}
@@ -2864,13 +2864,13 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
file_handle.opened_path = estrdup(resolved_path);
}
-//??? if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-//??? new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-//??? zend_destroy_file_handle(&file_handle TSRMLS_CC);
-//??? } else {
-//??? zend_file_handle_dtor(&file_handle TSRMLS_CC);
-//??? failure_retval=1;
-//??? }
+ if (zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path))) {
+ new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+ zend_destroy_file_handle(&file_handle TSRMLS_CC);
+ } else {
+ zend_file_handle_dtor(&file_handle TSRMLS_CC);
+ failure_retval=1;
+ }
} else {
if (opline->extended_value == ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
@@ -7846,7 +7846,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
if (resolved_path) {
-//??? failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+ failure_retval = zend_hash_str_exists(&EG(included_files), resolved_path, strlen(resolved_path));
} else {
resolved_path = Z_STRVAL_P(inc_filename);
}
@@ -7859,13 +7859,13 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
file_handle.opened_path = estrdup(resolved_path);
}
-//??? if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-//??? new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-//??? zend_destroy_file_handle(&file_handle TSRMLS_CC);
-//??? } else {
-//??? zend_file_handle_dtor(&file_handle TSRMLS_CC);
-//??? failure_retval=1;
-//??? }
+ if (zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path))) {
+ new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+ zend_destroy_file_handle(&file_handle TSRMLS_CC);
+ } else {
+ zend_file_handle_dtor(&file_handle TSRMLS_CC);
+ failure_retval=1;
+ }
} else {
if (opline->extended_value == ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
@@ -12875,7 +12875,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
if (resolved_path) {
-//??? failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+ failure_retval = zend_hash_str_exists(&EG(included_files), resolved_path, strlen(resolved_path));
} else {
resolved_path = Z_STRVAL_P(inc_filename);
}
@@ -12888,13 +12888,13 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
file_handle.opened_path = estrdup(resolved_path);
}
-//??? if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-//??? new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-//??? zend_destroy_file_handle(&file_handle TSRMLS_CC);
-//??? } else {
-//??? zend_file_handle_dtor(&file_handle TSRMLS_CC);
-//??? failure_retval=1;
-//??? }
+ if (zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path))) {
+ new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+ zend_destroy_file_handle(&file_handle TSRMLS_CC);
+ } else {
+ zend_file_handle_dtor(&file_handle TSRMLS_CC);
+ failure_retval=1;
+ }
} else {
if (opline->extended_value == ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
@@ -29529,7 +29529,7 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
if (resolved_path) {
-//??? failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+ failure_retval = zend_hash_str_exists(&EG(included_files), resolved_path, strlen(resolved_path));
} else {
resolved_path = Z_STRVAL_P(inc_filename);
}
@@ -29542,13 +29542,13 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
file_handle.opened_path = estrdup(resolved_path);
}
-//??? if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-//??? new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-//??? zend_destroy_file_handle(&file_handle TSRMLS_CC);
-//??? } else {
-//??? zend_file_handle_dtor(&file_handle TSRMLS_CC);
-//??? failure_retval=1;
-//??? }
+ if (zend_hash_str_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path))) {
+ new_op_array = zend_compile_file(&file_handle, (opline->extended_value==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+ zend_destroy_file_handle(&file_handle TSRMLS_CC);
+ } else {
+ zend_file_handle_dtor(&file_handle TSRMLS_CC);
+ failure_retval=1;
+ }
} else {
if (opline->extended_value == ZEND_INCLUDE_ONCE) {
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 502d15ea3a..f16cc40969 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1861,7 +1861,7 @@ PHPAPI HashTable* php_splice(HashTable *in_hash, int offset, int length, zval *l
/* ..for each one, create a new zval, copy entry into it and copy it into the output hash */
for (i = 0; i < list_count; i++) {
entry = &list[i];
- Z_ADDREF_P(entry);
+ if (IS_REFCOUNTED(Z_TYPE_P(entry))) Z_ADDREF_P(entry);
zend_hash_next_index_insert(out_hash, entry);
}
}
@@ -1871,7 +1871,7 @@ PHPAPI HashTable* php_splice(HashTable *in_hash, int offset, int length, zval *l
p = in_hash->arData + idx;
if (Z_TYPE(p->val) == IS_UNDEF) continue;
entry = &p->val;
- Z_ADDREF_P(entry);
+ if (IS_REFCOUNTED(Z_TYPE_P(entry))) Z_ADDREF_P(entry);
if (p->key == NULL) {
zend_hash_next_index_insert(out_hash, entry);
} else {
diff --git a/ext/standard/type.c b/ext/standard/type.c
index 3fe312644b..4488d4f1ae 100644
--- a/ext/standard/type.c
+++ b/ext/standard/type.c
@@ -90,34 +90,34 @@ PHP_FUNCTION(gettype)
Set the type of the variable */
PHP_FUNCTION(settype)
{
- zval **var;
+ zval *var;
char *type;
int type_len = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs", &var, &type, &type_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &var, &type, &type_len) == FAILURE) {
return;
}
if (!strcasecmp(type, "integer")) {
- convert_to_long(*var);
+ convert_to_long(var);
} else if (!strcasecmp(type, "int")) {
- convert_to_long(*var);
+ convert_to_long(var);
} else if (!strcasecmp(type, "float")) {
- convert_to_double(*var);
+ convert_to_double(var);
} else if (!strcasecmp(type, "double")) { /* deprecated */
- convert_to_double(*var);
+ convert_to_double(var);
} else if (!strcasecmp(type, "string")) {
- convert_to_string(*var);
+ convert_to_string(var);
} else if (!strcasecmp(type, "array")) {
- convert_to_array(*var);
+ convert_to_array(var);
} else if (!strcasecmp(type, "object")) {
- convert_to_object(*var);
+ convert_to_object(var);
} else if (!strcasecmp(type, "bool")) {
- convert_to_boolean(*var);
+ convert_to_boolean(var);
} else if (!strcasecmp(type, "boolean")) {
- convert_to_boolean(*var);
+ convert_to_boolean(var);
} else if (!strcasecmp(type, "null")) {
- convert_to_null(*var);
+ convert_to_null(var);
} else if (!strcasecmp(type, "resource")) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot convert to resource type");
RETURN_FALSE;