diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-02-21 22:41:48 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-02-21 22:41:48 +0800 |
| commit | 013cc55395e2b60e801eb9a8bced0219d17df129 (patch) | |
| tree | a75541ba8d833e5e70e5f8475583d031122f6a98 | |
| parent | 76c28f878ae37975b5520aaedf4b8f2986fe540b (diff) | |
| parent | 25490102783a0aadc1700b549f4d57380df3da22 (diff) | |
| download | php-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.c | 8 | ||||
| -rw-r--r-- | Zend/zend_compile.c | 54 | ||||
| -rw-r--r-- | Zend/zend_language_scanner.c | 343 | ||||
| -rw-r--r-- | Zend/zend_language_scanner.l | 49 | ||||
| -rw-r--r-- | Zend/zend_vm_def.h | 16 | ||||
| -rw-r--r-- | Zend/zend_vm_execute.h | 64 | ||||
| -rw-r--r-- | ext/standard/array.c | 4 | ||||
| -rw-r--r-- | ext/standard/type.c | 24 |
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; |
