gron Tue, 01 Nov 2011 00:39:10 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=318625
Log: Fixed Bug #60145 (Usage of trait's use statement inside interfaces not properly checked.) Bug: https://bugs.php.net/60145 (Assigned) interface + use trait yields error for the abstract class? Changed paths: A php/php-src/branches/PHP_5_4/Zend/tests/traits/bug60145.phpt U php/php-src/branches/PHP_5_4/Zend/zend_compile.c A php/php-src/trunk/Zend/tests/traits/bug60145.phpt U php/php-src/trunk/Zend/zend_compile.c Added: php/php-src/branches/PHP_5_4/Zend/tests/traits/bug60145.phpt =================================================================== --- php/php-src/branches/PHP_5_4/Zend/tests/traits/bug60145.phpt (rev 0) +++ php/php-src/branches/PHP_5_4/Zend/tests/traits/bug60145.phpt 2011-11-01 00:39:10 UTC (rev 318625) @@ -0,0 +1,17 @@ +--TEST-- +Bug #60145 (Usage of trait's use statement inside interfaces not properly checked.) +--FILE-- +<?php + +trait foo { + +} + +interface MyInterface { + use foo; + + public function b(); + +} +--EXPECTF-- +Fatal error: Cannot use traits inside of interfaces. foo is used in MyInterface in %s on line %d Modified: php/php-src/branches/PHP_5_4/Zend/zend_compile.c =================================================================== --- php/php-src/branches/PHP_5_4/Zend/zend_compile.c 2011-11-01 00:08:34 UTC (rev 318624) +++ php/php-src/branches/PHP_5_4/Zend/zend_compile.c 2011-11-01 00:39:10 UTC (rev 318625) @@ -5023,7 +5023,13 @@ void zend_do_implements_trait(znode *trait_name TSRMLS_DC) /* {{{ */ { zend_op *opline; + if ((CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE)) { + zend_error(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); + } + switch (zend_get_class_fetch_type(Z_STRVAL(trait_name->u.constant), Z_STRLEN(trait_name->u.constant))) { case ZEND_FETCH_CLASS_SELF: case ZEND_FETCH_CLASS_PARENT: Added: php/php-src/trunk/Zend/tests/traits/bug60145.phpt =================================================================== --- php/php-src/trunk/Zend/tests/traits/bug60145.phpt (rev 0) +++ php/php-src/trunk/Zend/tests/traits/bug60145.phpt 2011-11-01 00:39:10 UTC (rev 318625) @@ -0,0 +1,17 @@ +--TEST-- +Bug #60145 (Usage of trait's use statement inside interfaces not properly checked.) +--FILE-- +<?php + +trait foo { + +} + +interface MyInterface { + use foo; + + public function b(); + +} +--EXPECTF-- +Fatal error: Cannot use traits inside of interfaces. foo is used in MyInterface in %s on line %d Modified: php/php-src/trunk/Zend/zend_compile.c =================================================================== --- php/php-src/trunk/Zend/zend_compile.c 2011-11-01 00:08:34 UTC (rev 318624) +++ php/php-src/trunk/Zend/zend_compile.c 2011-11-01 00:39:10 UTC (rev 318625) @@ -5023,7 +5023,13 @@ void zend_do_implements_trait(znode *trait_name TSRMLS_DC) /* {{{ */ { zend_op *opline; + if ((CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE)) { + zend_error(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); + } + switch (zend_get_class_fetch_type(Z_STRVAL(trait_name->u.constant), Z_STRLEN(trait_name->u.constant))) { case ZEND_FETCH_CLASS_SELF: case ZEND_FETCH_CLASS_PARENT:
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php