]> granicus.if.org Git - php/commitdiff
Fix handling of ::foo
authorZeev Suraski <zeev@php.net>
Sun, 9 Mar 2003 22:17:15 +0000 (22:17 +0000)
committerZeev Suraski <zeev@php.net>
Sun, 9 Mar 2003 22:17:15 +0000 (22:17 +0000)
Zend/zend_compile.c
Zend/zend_compile.h
Zend/zend_language_parser.y

index 38df0b9288bd4cdaa70521cebda5c7d65ee1c097..5ccec45ebe27a15272fce706f0f53069c1dc233f 100644 (file)
@@ -1205,7 +1205,7 @@ void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC)
 }
 
 
-void zend_do_fetch_class(znode *result, znode *namespace_name, znode *class_name TSRMLS_DC)
+void zend_do_fetch_class(znode *result, znode *namespace_name, znode *class_name, zend_bool global_namespace TSRMLS_DC)
 {
        long fetch_class_op_number;
        zend_op *opline;
@@ -1219,7 +1219,7 @@ void zend_do_fetch_class(znode *result, znode *namespace_name, znode *class_name
                opline->op1 = *namespace_name;
        } else {
                SET_UNUSED(opline->op1);
-               if (!IN_NAMESPACE()) {
+               if (global_namespace) {
                        opline->extended_value = ZEND_FETCH_CLASS_GLOBAL;
                }
        }
index c539ab49b4f1cfc1945915b29baa51e55243c2d9..20e29281518b4b70aa66f60861cd6cf0d4eb69cd 100644 (file)
@@ -316,7 +316,7 @@ void zend_do_receive_arg(zend_uchar op, znode *var, znode *offset, znode *initia
 int zend_do_begin_function_call(znode *function_name TSRMLS_DC);
 void zend_do_begin_method_call(znode *left_bracket TSRMLS_DC);
 void zend_do_begin_dynamic_function_call(znode *function_name TSRMLS_DC);
-void zend_do_fetch_class(znode *result, znode *namespace_name, znode *class_name TSRMLS_DC);
+void zend_do_fetch_class(znode *result, znode *namespace_name, znode *class_name, zend_bool global_namespace TSRMLS_DC);
 void zend_do_fetch_class_name(znode *result, znode *class_entry, znode *class_name, zend_bool case_sensitive TSRMLS_DC);
 void zend_do_begin_class_member_function_call(TSRMLS_D);
 void zend_do_end_function_call(znode *function_name, znode *result, znode *argument_list, int is_method, int is_dynamic_fcall TSRMLS_DC);
index 95eb185912a253bd65b4c633e8bab02f37371616..e0695b6494b93f6697d821b3f8b0b8a34c51af33 100644 (file)
@@ -454,8 +454,9 @@ non_empty_parameter_list:
 
 optional_class_type:
                /* empty */             { $$.op_type = IS_UNUSED; }
-       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3 TSRMLS_CC); }
-       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
+       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3, 0 TSRMLS_CC); }
+       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, NULL, &$2, 1 TSRMLS_CC); }
+       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
 ;
 
 function_call_parameter_list:
@@ -649,19 +650,20 @@ function_call:
 ;
 
 fully_qualified_class_name:
-               namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3 TSRMLS_CC); }
-       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, NULL, &$2 TSRMLS_CC);  }
-       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
+               namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3, 0 TSRMLS_CC); }
+       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, NULL, &$2, 1 TSRMLS_CC);  }
+       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
 ;
 
 import_namespace:
-               T_NAMESPACE_NAME { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
-       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
+               T_NAMESPACE_NAME { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
+       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
 ;
 
 new_class_entry:
-               namespace_name T_PAAMAYIM_NEKUDOTAYIM static_or_variable_string { zend_do_fetch_class(&$$, &$1, &$3 TSRMLS_CC); }
-       |       static_or_variable_string { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
+               namespace_name T_PAAMAYIM_NEKUDOTAYIM static_or_variable_string { zend_do_fetch_class(&$$, &$1, &$3, 0 TSRMLS_CC); }
+       |       T_PAAMAYIM_NEKUDOTAYIM static_or_variable_string { zend_do_fetch_class(&$$, NULL, &$2, 1 TSRMLS_CC); }
+       |       static_or_variable_string { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
 ;
 
 namespace_name:
@@ -675,8 +677,9 @@ static_or_variable_string:
 ;
 
 instanceof_expr:
-               namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3 TSRMLS_CC); }
-       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1 TSRMLS_CC); }
+               namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, &$1, &$3, 0 TSRMLS_CC); }
+       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$$, NULL, &$2, 1 TSRMLS_CC); }
+       |       T_STRING { zend_do_fetch_class(&$$, NULL, &$1, 0 TSRMLS_CC); }
 ;
 
 exit_expr:
@@ -798,9 +801,9 @@ variable_without_objects:
 ;
 
 static_member:
-               T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $4; zend_do_fetch_class(&$1, NULL, &$2 TSRMLS_CC); zend_do_fetch_static_member(&$1 TSRMLS_CC); }
-       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_class(&$2, NULL, &$1 TSRMLS_CC);  zend_do_fetch_static_member(&$2 TSRMLS_CC); }
-       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $5; zend_do_fetch_class(&$4, &$1, &$3 TSRMLS_CC); zend_do_fetch_static_member(&$4 TSRMLS_CC); }
+               T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $4; zend_do_fetch_class(&$1, NULL, &$2, 1 TSRMLS_CC); zend_do_fetch_static_member(&$1 TSRMLS_CC); }
+       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $3; zend_do_fetch_class(&$2, NULL, &$1, 0 TSRMLS_CC);  zend_do_fetch_static_member(&$2 TSRMLS_CC); }
+       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM variable_without_objects { $$ = $5; zend_do_fetch_class(&$4, &$1, &$3, 0 TSRMLS_CC); zend_do_fetch_static_member(&$4 TSRMLS_CC); }
 ;
 
 
@@ -931,9 +934,9 @@ isset_variables:
 
 class_or_namespace_constant:
                T_PAAMAYIM_NEKUDOTAYIM namespace_name { zend_do_fetch_constant(&$$, NULL, &$2, ZEND_RT TSRMLS_CC); }
-       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$1, NULL, &$2 TSRMLS_CC); zend_do_fetch_constant(&$$, &$1, &$4, ZEND_RT TSRMLS_CC); }
-       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$2, NULL, &$1 TSRMLS_CC); zend_do_fetch_constant(&$$, &$2, &$3, ZEND_RT TSRMLS_CC); }
-       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$4, &$1, &$3 TSRMLS_CC); zend_do_fetch_constant(&$$, &$4, &$5, ZEND_RT TSRMLS_CC); }
+       |       T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$1, NULL, &$2, 1 TSRMLS_CC); zend_do_fetch_constant(&$$, &$1, &$4, ZEND_RT TSRMLS_CC); }
+       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$2, NULL, &$1, 0 TSRMLS_CC); zend_do_fetch_constant(&$$, &$2, &$3, ZEND_RT TSRMLS_CC); }
+       |       namespace_name T_PAAMAYIM_NEKUDOTAYIM T_STRING T_PAAMAYIM_NEKUDOTAYIM T_STRING { zend_do_fetch_class(&$4, &$1, &$3, 0 TSRMLS_CC); zend_do_fetch_constant(&$$, &$4, &$5, ZEND_RT TSRMLS_CC); }
 ;
 
 %%