Commit:    ef9e003b0c30e704073f125632e916e927363426
Author:    Nikita Popov <ni...@php.net>         Fri, 13 Sep 2013 12:18:39 +0200
Parents:   5350b9957a6c4b4e4cb1cdcd9f887a7812ef664f
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=ef9e003b0c30e704073f125632e916e927363426

Log:
Small cleanup in class name resolution of compiler

 * The fetch_type and check_ns_name parameters of
   zend_resolve_class_name were unused and are now removed.
 * ZEND_FETCH_CLASS_GLOBAL is no longer used (no code actually
   checking for it).
 * The checks for usage of "namespace" as class name were
   unnecessary as that situation can't occur anyways.

Changed paths:
  M  Zend/zend_compile.c
  M  Zend/zend_compile.h
  M  Zend/zend_language_parser.y

diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index f250b2b..a592586 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -723,7 +723,7 @@ void zend_do_fetch_static_member(znode *result, znode 
*class_name TSRMLS_DC) /*
 
        if (class_name->op_type == IS_CONST &&
            ZEND_FETCH_CLASS_DEFAULT == 
zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), 
Z_STRLEN(class_name->u.constant))) {
-               zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 
TSRMLS_CC);
+               zend_resolve_class_name(class_name TSRMLS_CC);
                class_node = *class_name;
        } else {
                zend_do_fetch_class(&class_node, class_name TSRMLS_CC);
@@ -1840,15 +1840,6 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, 
const znode *offset, con
        zend_arg_info *cur_arg_info;
        znode var;
 
-       if (class_type->op_type == IS_CONST &&
-           Z_TYPE(class_type->u.constant) == IS_STRING &&
-           Z_STRLEN(class_type->u.constant) == 0) {
-               /* Usage of namespace as class name not in namespace */
-               zval_dtor(&class_type->u.constant);
-               zend_error(E_COMPILE_ERROR, "Cannot use 'namespace' as a class 
name");
-               return;
-       }
-
        if (zend_is_auto_global_quick(Z_STRVAL(varname->u.constant), 
Z_STRLEN(varname->u.constant), 0 TSRMLS_CC)) {
                zend_error(E_COMPILE_ERROR, "Cannot re-assign auto-global 
variable %s", Z_STRVAL(varname->u.constant));
        } else {
@@ -1913,7 +1904,7 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, 
const znode *offset, con
                        } else {
                                cur_arg_info->type_hint = IS_OBJECT;
                                if (ZEND_FETCH_CLASS_DEFAULT == 
zend_get_class_fetch_type(Z_STRVAL(class_type->u.constant), 
Z_STRLEN(class_type->u.constant))) {
-                                       zend_resolve_class_name(class_type, 
opline->extended_value, 1 TSRMLS_CC);
+                                       zend_resolve_class_name(class_type 
TSRMLS_CC);
                                }
                                Z_STRVAL(class_type->u.constant) = 
(char*)zend_new_interned_string(class_type->u.constant.value.str.val, 
class_type->u.constant.value.str.len + 1, 1 TSRMLS_CC);
                                cur_arg_info->class_name = 
class_type->u.constant.value.str.val;
@@ -2164,7 +2155,7 @@ void zend_do_resolve_class_name(znode *result, znode 
*class_name, int is_static
                        zend_do_fetch_constant(result, class_name, 
&constant_name, ZEND_RT, 1 TSRMLS_CC);
                        break;
                case ZEND_FETCH_CLASS_DEFAULT:
-                       zend_resolve_class_name(class_name, 
ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
+                       zend_resolve_class_name(class_name TSRMLS_CC);
                        *result = *class_name;
                        break;
        }
@@ -2174,7 +2165,7 @@ void zend_do_resolve_class_name(znode *result, znode 
*class_name, int is_static
 }
 /* }}} */
 
-void zend_resolve_class_name(znode *class_name, ulong fetch_type, int 
check_ns_name TSRMLS_DC) /* {{{ */
+void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */
 {
        char *compound;
        char *lcname;
@@ -2253,21 +2244,12 @@ void zend_do_fetch_class(znode *result, znode 
*class_name TSRMLS_DC) /* {{{ */
        long fetch_class_op_number;
        zend_op *opline;
 
-       if (class_name->op_type == IS_CONST &&
-           Z_TYPE(class_name->u.constant) == IS_STRING &&
-           Z_STRLEN(class_name->u.constant) == 0) {
-               /* Usage of namespace as class name not in namespace */
-               zval_dtor(&class_name->u.constant);
-               zend_error(E_COMPILE_ERROR, "Cannot use 'namespace' as a class 
name");
-               return;
-       }
-
        fetch_class_op_number = get_next_op_number(CG(active_op_array));
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 
        opline->opcode = ZEND_FETCH_CLASS;
        SET_UNUSED(opline->op1);
-       opline->extended_value = ZEND_FETCH_CLASS_GLOBAL;
+       opline->extended_value = ZEND_FETCH_CLASS_DEFAULT;
        CG(catch_begin) = fetch_class_op_number;
        if (class_name->op_type == IS_CONST) {
                int fetch_type;
@@ -2282,7 +2264,7 @@ void zend_do_fetch_class(znode *result, znode *class_name 
TSRMLS_DC) /* {{{ */
                                zval_dtor(&class_name->u.constant);
                                break;
                        default:
-                               zend_resolve_class_name(class_name, 
opline->extended_value, 0 TSRMLS_CC);
+                               zend_resolve_class_name(class_name TSRMLS_CC);
                                opline->op2_type = IS_CONST;
                                opline->op2.constant =
                                        
zend_add_class_name_literal(CG(active_op_array), &class_name->u.constant 
TSRMLS_CC);
@@ -2458,7 +2440,7 @@ int zend_do_begin_class_member_function_call(znode 
*class_name, znode *method_na
 
        if (class_name->op_type == IS_CONST &&
            ZEND_FETCH_CLASS_DEFAULT == 
zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), 
Z_STRLEN(class_name->u.constant))) {
-               zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 
TSRMLS_CC);
+               zend_resolve_class_name(class_name TSRMLS_CC);
                class_node = *class_name;
                opline = get_next_op(CG(active_op_array) TSRMLS_CC);
        } else {
@@ -2896,7 +2878,7 @@ void zend_do_begin_catch(znode *catch_token, znode 
*class_name, znode *catch_var
 
        if (class_name->op_type == IS_CONST &&
            ZEND_FETCH_CLASS_DEFAULT == 
zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), 
Z_STRLEN(class_name->u.constant))) {
-               zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 
TSRMLS_CC);
+               zend_resolve_class_name(class_name TSRMLS_CC);
                catch_class = *class_name;
        } else {
                zend_error(E_COMPILE_ERROR, "Bad class name in the catch 
statement");
@@ -4470,7 +4452,7 @@ void zend_prepare_reference(znode *result, znode 
*class_name, znode *method_name
        /* REM: There should not be a need for copying,
           zend_do_begin_class_declaration is also just using that string */
        if (class_name) {
-               zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 
TSRMLS_CC);
+               zend_resolve_class_name(class_name TSRMLS_CC);
                method_ref->class_name = Z_STRVAL(class_name->u.constant);
                method_ref->cname_len  = Z_STRLEN(class_name->u.constant);
        } else {
@@ -5171,7 +5153,7 @@ void zend_do_implements_interface(znode *interface_name 
TSRMLS_DC) /* {{{ */
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
        opline->opcode = ZEND_ADD_INTERFACE;
        SET_NODE(opline->op1, &CG(implementing_class));
-       zend_resolve_class_name(interface_name, opline->extended_value, 0 
TSRMLS_CC);
+       zend_resolve_class_name(interface_name TSRMLS_CC);
        opline->extended_value = (opline->extended_value & 
~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
        opline->op2_type = IS_CONST;
        opline->op2.constant = zend_add_class_name_literal(CG(active_op_array), 
&interface_name->u.constant TSRMLS_CC);
@@ -5203,7 +5185,7 @@ void zend_do_use_trait(znode *trait_name TSRMLS_DC) /* 
{{{ */
        opline = get_next_op(CG(active_op_array) TSRMLS_CC);
        opline->opcode = ZEND_ADD_TRAIT;
        SET_NODE(opline->op1, &CG(implementing_class));
-       zend_resolve_class_name(trait_name, opline->extended_value, 0 
TSRMLS_CC);
+       zend_resolve_class_name(trait_name TSRMLS_CC);
        opline->extended_value = ZEND_FETCH_CLASS_TRAIT;
        opline->op2_type = IS_CONST;
        opline->op2.constant = zend_add_class_name_literal(CG(active_op_array), 
&trait_name->u.constant TSRMLS_CC);
@@ -5582,7 +5564,7 @@ void zend_do_fetch_constant(znode *result, znode 
*constant_container, znode *con
                                if (ZEND_FETCH_CLASS_STATIC == type) {
                                        zend_error(E_ERROR, "\"static::\" is 
not allowed in compile-time constants");
                                } else if (ZEND_FETCH_CLASS_DEFAULT == type) {
-                                       
zend_resolve_class_name(constant_container, fetch_type, 1 TSRMLS_CC);
+                                       
zend_resolve_class_name(constant_container TSRMLS_CC);
                                }
                                zend_do_build_full_name(NULL, 
constant_container, constant_name, 1 TSRMLS_CC);
                                *result = *constant_container;
@@ -5591,7 +5573,7 @@ void zend_do_fetch_constant(znode *result, znode 
*constant_container, znode *con
                        case ZEND_RT:
                                if (constant_container->op_type == IS_CONST &&
                                ZEND_FETCH_CLASS_DEFAULT == 
zend_get_class_fetch_type(Z_STRVAL(constant_container->u.constant), 
Z_STRLEN(constant_container->u.constant))) {
-                                       
zend_resolve_class_name(constant_container, fetch_type, 1 TSRMLS_CC);
+                                       
zend_resolve_class_name(constant_container TSRMLS_CC);
                                } else {
                                        zend_do_fetch_class(&tmp, 
constant_container TSRMLS_CC);
                                        constant_container = &tmp;
diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h
index 9c55b5e..61d1142 100644
--- a/Zend/zend_compile.h
+++ b/Zend/zend_compile.h
@@ -438,7 +438,7 @@ ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
 ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D);
 
 void zend_resolve_non_class_name(znode *element_name, zend_bool 
check_namespace TSRMLS_DC);
-void zend_resolve_class_name(znode *class_name, ulong fetch_type, int 
check_ns_name TSRMLS_DC);
+void zend_resolve_class_name(znode *class_name TSRMLS_DC);
 ZEND_API const char* zend_get_compiled_variable_name(const zend_op_array 
*op_array, zend_uint var, int* name_len);
 
 #ifdef ZTS
@@ -726,8 +726,8 @@ int zend_add_literal(zend_op_array *op_array, const zval 
*zv TSRMLS_DC);
 #define ZEND_FETCH_CLASS_DEFAULT       0
 #define ZEND_FETCH_CLASS_SELF          1
 #define ZEND_FETCH_CLASS_PARENT                2
-#define ZEND_FETCH_CLASS_MAIN          3
-#define ZEND_FETCH_CLASS_GLOBAL                4
+#define ZEND_FETCH_CLASS_MAIN          3       /* unused */
+#define ZEND_FETCH_CLASS_GLOBAL                4       /* unused */
 #define ZEND_FETCH_CLASS_AUTO          5
 #define ZEND_FETCH_CLASS_INTERFACE     6
 #define ZEND_FETCH_CLASS_STATIC                7
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 6a9a24a..403146e 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -629,8 +629,8 @@ trait_precedence:
 ;
 
 trait_reference_list:
-               fully_qualified_class_name                                      
                                { zend_resolve_class_name(&$1, 
ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC); zend_init_list(&$$.u.op.ptr, 
Z_STRVAL($1.u.constant) TSRMLS_CC); }
-       |       trait_reference_list ',' fully_qualified_class_name             
        { zend_resolve_class_name(&$3, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC); 
zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; }
+               fully_qualified_class_name                                      
                                { zend_resolve_class_name(&$1 TSRMLS_CC); 
zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); }
+       |       trait_reference_list ',' fully_qualified_class_name             
        { zend_resolve_class_name(&$3 TSRMLS_CC); 
zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; }
 ;
 
 trait_method_reference:
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to