cvs: ZendEngine2 / zend_compile.c zend_language_parser.y php-src/tests/classes interface_doubled.phpt

From: Date: Wed, 11 Feb 2004 22:13:39 +0000
Subject: cvs: ZendEngine2 / zend_compile.c zend_language_parser.y php-src/tests/classes interface_doubled.phpt
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-2359@lists.php.net to get a copy of this message
helly Wed Feb 11 17:13:39 2004 EDT Modified files: /php-src/tests/classes interface_doubled.phpt /ZendEngine2 zend_compile.c zend_language_parser.y Log: Fix: <interface> [extends <interface> [, <ineterface>]* ] http://cvs.php.net/diff.php/php-src/tests/classes/interface_doubled.phpt?r1=1.6&r2=1.7&ty=u Index: php-src/tests/classes/interface_doubled.phpt diff -u php-src/tests/classes/interface_doubled.phpt:1.6 php-src/tests/classes/interface_doubled.phpt:1.7 --- php-src/tests/classes/interface_doubled.phpt:1.6 Wed Jan 21 17:36:49 2004 +++ php-src/tests/classes/interface_doubled.phpt Wed Feb 11 17:13:22 2004 @@ -1,5 +1,5 @@ --TEST-- -ZE2 An interface may both inherit and implement base interfaces +ZE2 An interface extends base interfaces --SKIPIF-- <?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?> --FILE-- @@ -25,7 +25,7 @@ abstract function f_d(); } -interface if_f extends if_e, if_a, if_b, if_c, if_d, if_e { +interface if_f extends /*if_e,*/ if_a, if_b, if_c, if_d /*, if_e*/ { } class base { @@ -154,6 +154,7 @@ echo $t->test('if_e'); ?> +===DONE=== --EXPECTF-- class_a is_a(class_a, if_a) yes @@ -196,4 +197,5 @@ is_a(class_g, if_b) yes is_a(class_g, if_c) yes is_a(class_g, if_d) yes -is_a(class_g, if_e) yes \ No newline at end of file +is_a(class_g, if_e) no +===DONE=== http://cvs.php.net/diff.php/ZendEngine2/zend_compile.c?r1=1.540&r2=1.541&ty=u Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.540 ZendEngine2/zend_compile.c:1.541 --- ZendEngine2/zend_compile.c:1.540 Wed Feb 11 05:51:05 2004 +++ ZendEngine2/zend_compile.c Wed Feb 11 17:13:39 2004 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_compile.c,v 1.540 2004/02/11 10:51:05 zeev Exp $ */ +/* $Id: zend_compile.c,v 1.541 2004/02/11 22:13:39 helly Exp $ */ #include "zend_language_parser.h" #include "zend.h" @@ -2452,7 +2452,7 @@ new_class_entry->line_start = zend_get_compiled_lineno(TSRMLS_C); new_class_entry->ce_flags |= class_token->u.constant.value.lval; - if (parent_class_name->op_type != IS_UNUSED) { + if (parent_class_name && parent_class_name->op_type != IS_UNUSED) { doing_inheritance = 1; } @@ -2542,10 +2542,6 @@ { zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC); - if (CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE) { - zend_error(E_COMPILE_ERROR, "Interfaces cannot implement other classes/interfaces"); - } - opline->opcode = ZEND_ADD_INTERFACE; opline->op1 = CG(implementing_class); opline->op2 = *interface_znode; http://cvs.php.net/diff.php/ZendEngine2/zend_language_parser.y?r1=1.137&r2=1.138&ty=u Index: ZendEngine2/zend_language_parser.y diff -u ZendEngine2/zend_language_parser.y:1.137 ZendEngine2/zend_language_parser.y:1.138 --- ZendEngine2/zend_language_parser.y:1.137 Wed Feb 4 11:30:15 2004 +++ ZendEngine2/zend_language_parser.y Wed Feb 11 17:13:39 2004 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.137 2004/02/04 16:30:15 zeev Exp $ */ +/* $Id: zend_language_parser.y,v 1.138 2004/02/11 22:13:39 helly Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: @@ -274,6 +274,12 @@ '{' class_statement_list '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); } + | interface_entry T_STRING + { zend_do_begin_class_declaration(&$1, &$2, NULL TSRMLS_CC); } + interface_extends_list + '{' + class_statement_list + '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); } ; @@ -281,7 +287,6 @@ T_CLASS { $$.u.constant.value.lval = 0; } | T_ABSTRACT T_CLASS { $$.u.constant.value.lval = ZEND_ACC_ABSTRACT_CLASS; } | T_FINAL T_CLASS { $$.u.constant.value.lval = ZEND_ACC_FINAL_CLASS; } - | T_INTERFACE { $$.u.constant.value.lval = ZEND_ACC_INTERFACE; } ; extends_from: @@ -289,6 +294,15 @@ | T_EXTENDS fully_qualified_class_name { $$ = $2; } ; +interface_entry: + T_INTERFACE { $$.u.constant.value.lval = ZEND_ACC_INTERFACE; } +; + +interface_extends_list: + /* empty */ + | T_EXTENDS interface_list +; + implements_list: /* empty */ | T_IMPLEMENTS interface_list

« previous php.zend-engine.cvs (#2359) next »