summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuilherme Blanco <guilhermeblanco@hotmail.com>2014-12-05 17:09:49 +0000
committerJulien Pauli <jpauli@php.net>2015-01-09 15:45:02 +0100
commitd51fb69c0125a144cacb8c59df89fea3f8ae7f4b (patch)
treefa054d097845ba51af8e4c361461beac686f4b21
parentf48c2327403ce76a870e74f31a069a64dfb711a2 (diff)
downloadphp-git-d51fb69c0125a144cacb8c59df89fea3f8ae7f4b.tar.gz
Removed parsing support traits to have extends and implements.
-rw-r--r--Zend/tests/traits/bug55524.phpt2
-rw-r--r--Zend/tests/traits/bugs/interfaces.phpt2
-rw-r--r--Zend/zend_compile.c12
-rw-r--r--Zend/zend_language_parser.y4
4 files changed, 4 insertions, 16 deletions
diff --git a/Zend/tests/traits/bug55524.phpt b/Zend/tests/traits/bug55524.phpt
index 137975980d..9fe36d7a80 100644
--- a/Zend/tests/traits/bug55524.phpt
+++ b/Zend/tests/traits/bug55524.phpt
@@ -12,4 +12,4 @@ trait Foo extends Base {
echo 'DONE';
?>
--EXPECTF--
-Fatal error: A trait (Foo) cannot extend a class. Traits can only be composed from other traits with the 'use' keyword. Error in %s on line %d
+Parse error: syntax error, unexpected 'extends' (T_EXTENDS), expecting '{' in %s on line %d
diff --git a/Zend/tests/traits/bugs/interfaces.phpt b/Zend/tests/traits/bugs/interfaces.phpt
index 486bda7efb..b632b73be2 100644
--- a/Zend/tests/traits/bugs/interfaces.phpt
+++ b/Zend/tests/traits/bugs/interfaces.phpt
@@ -16,4 +16,4 @@ trait THello implements MyInterface {
?>
--EXPECTF--
-Fatal error: Cannot use 'MyInterface' as interface on 'THello' since it is a Trait in %s on line %d \ No newline at end of file
+Parse error: syntax error, unexpected 'implements' (T_IMPLEMENTS), expecting '{' in %s on line %d
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 0164515b20..16b5cfaf13 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -4457,12 +4457,6 @@ void zend_compile_implements(znode *class_node, zend_ast *ast) /* {{{ */
zend_op *opline;
- /* Traits can not implement interfaces */
- if (ZEND_CE_IS_TRAIT(CG(active_class_entry))) {
- zend_error_noreturn(E_COMPILE_ERROR, "Cannot use '%s' as interface on '%s' "
- "since it is a Trait", name->val, CG(active_class_entry)->name->val);
- }
-
if (!zend_is_const_default_class_ref(class_ast)) {
zend_error_noreturn(E_COMPILE_ERROR,
"Cannot use '%s' as interface name as it is reserved", name->val);
@@ -4536,12 +4530,6 @@ void zend_compile_class_decl(zend_ast *ast) /* {{{ */
}
if (extends_ast) {
- if (ZEND_CE_IS_TRAIT(ce)) {
- zend_error_noreturn(E_COMPILE_ERROR, "A trait (%s) cannot extend a class. "
- "Traits can only be composed from other traits with the 'use' keyword. Error",
- name->val);
- }
-
if (!zend_is_const_default_class_ref(extends_ast)) {
zend_string *extends_name = zend_ast_get_str(extends_ast);
zend_error_noreturn(E_COMPILE_ERROR,
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 1d18ae9d7e..276e478b90 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -445,8 +445,8 @@ class_modifier:
trait_declaration_statement:
T_TRAIT { $<num>$ = CG(zend_lineno); }
- T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}'
- { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_TRAIT, $<num>2, $6, zend_ast_get_str($3), $4, $5, $8); }
+ T_STRING backup_doc_comment '{' class_statement_list '}'
+ { $$ = zend_ast_create_decl(ZEND_AST_CLASS, ZEND_ACC_TRAIT, $<num>2, $4, zend_ast_get_str($3), NULL, NULL, $6); }
;
interface_declaration_statement: