From: Felipe Pena Date: Sat, 2 Jul 2011 17:12:20 +0000 (+0000) Subject: - Fixed bug #55086 (Namespace alias does not work inside trait's use block) X-Git-Tag: php-5.4.0alpha2~62 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d8e8e68f07f7e9b994aaa6f563fdabaa4107aa9a;p=php - Fixed bug #55086 (Namespace alias does not work inside trait's use block) patch by: Pierrick --- diff --git a/Zend/tests/bug55086.phpt b/Zend/tests/bug55086.phpt new file mode 100644 index 0000000000..9a5c747b9f --- /dev/null +++ b/Zend/tests/bug55086.phpt @@ -0,0 +1,36 @@ +--TEST-- +Bug #55086 (Namespace alias does not work inside trait's use block) +--FILE-- +hello(), PHP_EOL; + echo $a->foo(), PHP_EOL; + try { + } catch(namespace \Foo $e) + { + } +} +?> +--EXPECT-- +hello from t1 +hello from t1 diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7842ec8f2e..5f9cef311b 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4052,6 +4052,8 @@ void zend_prepare_reference(znode *result, znode *class_name, znode *method_name /* REM: There should not be a need for copying, zend_do_begin_class_declaration is also just using that string */ if (class_name) { + ulong fetch_type = ZEND_FETCH_CLASS_GLOBAL; + zend_resolve_class_name(class_name, &fetch_type, 1 TSRMLS_CC); method_ref->class_name = Z_STRVAL(class_name->u.constant); method_ref->cname_len = Z_STRLEN(class_name->u.constant); } else { diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index 3d774bff25..4dd5bdb977 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -612,8 +612,8 @@ trait_precedence: ; trait_reference_list: - fully_qualified_class_name { zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); } - | trait_reference_list ',' fully_qualified_class_name { zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; } + fully_qualified_class_name { ulong fetch_type = ZEND_FETCH_CLASS_GLOBAL; zend_resolve_class_name(&$1, &fetch_type, 1 TSRMLS_CC); zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); } + | trait_reference_list ',' fully_qualified_class_name { ulong fetch_type = ZEND_FETCH_CLASS_GLOBAL; zend_resolve_class_name(&$3, &fetch_type, 1 TSRMLS_CC); zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; } ; trait_method_reference: