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

Reply via email to