Re: cvs: php-src / NEWS

From: Date: Wed, 04 Feb 2004 22:06:39 +0000
Subject: Re: cvs: php-src / NEWS
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-26019@lists.php.net to get a copy of this message
Hello Andi, Wednesday, February 4, 2004, 10:29:29 PM, you wrote: > andi Wed Feb 4 16:29:29 2004 EDT > Modified files: > /php-src NEWS > Log: > - Added recent stuff to NEWS > > http://cvs.php.net/diff.php/php-src/NEWS?r1=1.1595&r2=1.1596&ty=u > Index: php-src/NEWS > diff -u php-src/NEWS:1.1595 php-src/NEWS:1.1596 > --- php-src/NEWS:1.1595 Tue Feb 3 01:44:45 2004 > +++ php-src/NEWS Wed Feb 4 16:29:28 2004 > @@ -1,6 +1,20 @@ > PHP NEWS > [...] > +- Added support for an interface to extend another interface (Zeev) He didn't fix anything here. The point was to disallow interface implemnts but we still need to allow multiple base inetrfaces. Here is the patch to fix it: If you don't object i will commit. -- Best regards, Marcus mailto:helly@php.net

Index: tests/classes/interface_doubled.phpt =================================================================== RCS file: /repository/php-src/tests/classes/interface_doubled.phpt,v retrieving revision 1.6 diff -u -p -d -r1.6 interface_doubled.phpt --- tests/classes/interface_doubled.phpt 21 Jan 2004 22:36:49 -0000 1.6 +++ tests/classes/interface_doubled.phpt 4 Feb 2004 21:59:14 -0000 @@ -25,7 +25,7 @@ interface if_e { 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_d'); 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_a) yes 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=== Index: Zend/zend_compile.c =================================================================== RCS file: /repository/ZendEngine2/zend_compile.c,v retrieving revision 1.536 diff -u -p -d -r1.536 zend_compile.c --- Zend/zend_compile.c 4 Feb 2004 18:24:44 -0000 1.536 +++ Zend/zend_compile.c 4 Feb 2004 21:59:15 -0000 @@ -2456,7 +2456,7 @@ void zend_do_begin_class_declaration(zno 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; } @@ -2546,10 +2546,6 @@ void zend_do_implements_interface(znode { 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; Index: Zend/zend_language_parser.y =================================================================== RCS file: /repository/ZendEngine2/zend_language_parser.y,v retrieving revision 1.137 diff -u -p -d -r1.137 zend_language_parser.y --- Zend/zend_language_parser.y 4 Feb 2004 16:30:15 -0000 1.137 +++ Zend/zend_language_parser.y 4 Feb 2004 21:59:16 -0000 @@ -274,6 +274,12 @@ unticked_class_declaration_statement: '{' 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 @@ class_entry_type: 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 @@ extends_from: | 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.cvs (#26019) next »