johannes Thu Aug 2 21:53:53 2007 UTC Added files: /php-src/tests/lang 041.phpt 042.phpt 043.phpt 044.phpt
Modified files: /ZendEngine2 zend_language_parser.y Log: - Add possibility to call static class members using variables (Etienne Kneuss) http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_language_parser.y?r1=1.186&r2=1.187&diff_format=u Index: ZendEngine2/zend_language_parser.y diff -u ZendEngine2/zend_language_parser.y:1.186 ZendEngine2/zend_language_parser.y:1.187 --- ZendEngine2/zend_language_parser.y:1.186 Fri Jul 27 09:04:12 2007 +++ ZendEngine2/zend_language_parser.y Thu Aug 2 21:53:53 2007 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: zend_language_parser.y,v 1.186 2007/07/27 09:04:12 dmitry Exp $ */ +/* $Id: zend_language_parser.y,v 1.187 2007/08/02 21:53:53 johannes Exp $ */ /* * LALR shift/reduce conflicts and how they are resolved: @@ -649,6 +649,12 @@ | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING '(' { zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } + function_call_parameter_list + ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} + | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } + function_call_parameter_list + ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} | fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects '(' { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); zend_do_begin_class_member_function_call(&$1, &$3 TSRMLS_CC); } function_call_parameter_list ')' { zend_do_end_function_call(NULL, &$$, &$6, 1, 1 TSRMLS_CC); zend_do_extended_fcall_end(TSRMLS_C);} @@ -809,6 +815,11 @@ static_member: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); } + | variable_class_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_static_member(&$$, &$1 TSRMLS_CC); } +; + +variable_class_name: + reference_variable { zend_do_end_variable_parse(BP_VAR_R, 0 TSRMLS_CC); $$=$1;} ; @@ -935,6 +946,7 @@ class_constant: fully_qualified_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT TSRMLS_CC); } + | variable_class_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_constant(&$$, &$1, &$3, ZEND_RT TSRMLS_CC); } ; %% http://cvs.php.net/viewvc.cgi/php-src/tests/lang/041.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/041.phpt +++ php-src/tests/lang/041.phpt --TEST-- Dynamic access of static members --FILE-- <?php class A { public static $b = 'foo'; } $classname = 'A'; $binaryClassname = b'A'; $wrongClassname = 'B'; echo $classname::$b."\n"; echo $binaryClassname::$b."\n"; echo $wrongClassname::$b."\n"; ?> ===DONE=== --EXPECTF-- foo foo Fatal error: Class 'B' not found in %s041.php on line %d http://cvs.php.net/viewvc.cgi/php-src/tests/lang/042.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/042.phpt +++ php-src/tests/lang/042.phpt --TEST-- Dynamic access of constants --FILE-- <?php class A { const B = 'foo'; } $classname = 'A'; $binaryClassname = b'A'; $wrongClassname = 'B'; echo $classname::B."\n"; echo $binaryClassname::B."\n"; echo $wrongClassname::B."\n"; ?> ===DONE=== --EXPECTF-- foo foo Fatal error: Class 'B' not found in %s042.php on line %d http://cvs.php.net/viewvc.cgi/php-src/tests/lang/043.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/043.phpt +++ php-src/tests/lang/043.phpt --TEST-- Dynamic call for static methods --FILE-- <?php class A { static function foo() { return 'foo'; } } $classname = 'A'; $binaryClassname = b'A'; $wrongClassname = 'B'; echo $classname::foo()."\n"; echo $binaryClassname::foo()."\n"; echo $wrongClassname::foo()."\n"; ?> ===DONE=== --EXPECTF-- foo foo Fatal error: Class 'B' not found in %s043.php on line %d http://cvs.php.net/viewvc.cgi/php-src/tests/lang/044.phpt?view=markup&rev=1.1 Index: php-src/tests/lang/044.phpt +++ php-src/tests/lang/044.phpt --TEST-- Dynamic call for static methods dynamically named --FILE-- <?php class A { static function foo() { return 'foo'; } } $classname = 'A'; $binaryClassname = b'A'; $wrongClassname = 'B'; $methodname = 'foo'; $binaryMethodname = b'foo'; echo $classname::$methodname()."\n"; echo $classname::$binaryMethodname()."\n"; echo $binaryClassname::$methodname()."\n"; echo $binaryClassname::$binaryMethodname()."\n"; echo $wrongClassname::$binaryMethodname()."\n"; ?> ===DONE=== --EXPECTF-- foo foo foo foo Fatal error: Class 'B' not found in %s044.php on line %d -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php