Commit:    b45043a1b71c29a0c7b8de9e4929dde08bd61216
Author:    Bob Weinand <bobw...@hotmail.com>         Fri, 1 Nov 2013 16:16:58 
+0100
Parents:   b56c1ca95e16ea1c2a3ce251b91297d0a81a9070
Branches:  PHP-5.6

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

Log:
converted several switches to ifs and made more opcache friendly

Changed paths:
  M  Zend/zend.h
  M  Zend/zend_API.c
  M  Zend/zend_ast.c
  M  Zend/zend_builtin_functions.c
  M  Zend/zend_compile.c
  M  Zend/zend_execute_API.c
  M  Zend/zend_vm_def.h
  M  Zend/zend_vm_execute.h
  M  ext/reflection/php_reflection.c

diff --git a/Zend/zend.h b/Zend/zend.h
index 7ccd081..8154277 100644
--- a/Zend/zend.h
+++ b/Zend/zend.h
@@ -600,6 +600,8 @@ typedef int (*zend_write_func_t)(const char *str, uint 
str_length);
 #define IS_LEXICAL_REF                         0x040
 #define IS_CONSTANT_IN_NAMESPACE       0x100
 
+#define IS_CONSTANT_TYPE(type) (((type) & IS_CONSTANT_TYPE_MASK) >= 
IS_CONSTANT && ((type) & IS_CONSTANT_TYPE_MASK) <= IS_CONSTANT_AST)
+
 /* overloaded elements data types */
 #define OE_IS_ARRAY            (1<<0)
 #define OE_IS_OBJECT   (1<<1)
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index 3051d19..b414b52 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -1053,37 +1053,33 @@ ZEND_API void zend_merge_properties(zval *obj, 
HashTable *properties, int destro
 
 static int zval_update_class_constant(zval **pp, int is_static, int offset 
TSRMLS_DC) /* {{{ */
 {
-       switch (Z_TYPE_PP(pp) & IS_CONSTANT_TYPE_MASK) {
-               case IS_CONSTANT:
-               case IS_CONSTANT_ARRAY:
-               case IS_CONSTANT_AST: {
-                       zend_class_entry **scope = 
EG(in_execution)?&EG(scope):&CG(active_class_entry);
-
-                       if ((*scope)->parent) {
-                               zend_class_entry *ce = *scope;
-                               HashPosition pos;
-                               zend_property_info *prop_info;
-
-                               do {
-                                       for 
(zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos);
-                                            
zend_hash_get_current_data_ex(&ce->properties_info, (void **) &prop_info, &pos) 
== SUCCESS;
-                                            
zend_hash_move_forward_ex(&ce->properties_info, &pos)) {
-                                               if (is_static == 
((prop_info->flags & ZEND_ACC_STATIC) != 0) &&
-                                                           offset == 
prop_info->offset) {
-                                                       int ret;
-                                                       zend_class_entry 
*old_scope = *scope;
-                                                       *scope = prop_info->ce;
-                                                       ret = 
zval_update_constant(pp, (void*)1 TSRMLS_CC);
-                                                       *scope = old_scope;
-                                                       return ret;
-                                               }
-                                       }                               
-                                       ce = ce->parent;
-                               } while (ce);
-       
+       if (IS_CONSTANT_TYPE(Z_TYPE_PP(pp))) {
+               zend_class_entry **scope = 
EG(in_execution)?&EG(scope):&CG(active_class_entry);
+
+               if ((*scope)->parent) {
+                       zend_class_entry *ce = *scope;
+                       HashPosition pos;
+                       zend_property_info *prop_info;
+
+                       do {
+                               for 
(zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos);
+                                    
zend_hash_get_current_data_ex(&ce->properties_info, (void **) &prop_info, &pos) 
== SUCCESS;
+                                    
zend_hash_move_forward_ex(&ce->properties_info, &pos)) {
+                                       if (is_static == ((prop_info->flags & 
ZEND_ACC_STATIC) != 0) &&
+                                                   offset == 
prop_info->offset) {
+                                               int ret;
+                                               zend_class_entry *old_scope = 
*scope;
+                                               *scope = prop_info->ce;
+                                               ret = zval_update_constant(pp, 
(void*)1 TSRMLS_CC);
+                                               *scope = old_scope;
+                                               return ret;
+                                       }
+                               }                               
+                               ce = ce->parent;
+                       } while (ce);
+
                        }
-                       return zval_update_constant(pp, (void*)1 TSRMLS_CC);
-               }
+               return zval_update_constant(pp, (void*)1 TSRMLS_CC);
        }
        return 0;
 }
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 7d85e24..21c08da 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -21,30 +21,6 @@
 #include "zend_ast.h"
 #include "zend_execute.h"
 
-#define OP_IS_CONST_THEN(op, do_code) \
-       switch (op?Z_TYPE_P(op) & IS_CONSTANT_TYPE_MASK:-1) { \
-               case -1: \
-               case IS_CONSTANT: \
-               case IS_CONSTANT_ARRAY: \
-               case IS_CONSTANT_AST: { \
-                       do_code \
-               } \
-       }
-
-#define OP_IS_NOT_CONST_THEN(op, do_code) \
-       if (op) { \
-               switch (Z_TYPE_P(op) & IS_CONSTANT_TYPE_MASK) { \
-                       case IS_CONSTANT: \
-                       case IS_CONSTANT_ARRAY: \
-                       case IS_CONSTANT_AST: \
-                               break; \
-\
-                       default: { \
-                               do_code \
-                       } \
-               } \
-       }
-
 #define COPY_ZVAL_TO_OP(nr) \
        if (op##nr) { \
                Z_AST_P(result)->ops[nr] = emalloc(sizeof(zval)); \
@@ -54,9 +30,9 @@
        }
 
 void zend_ast_add(zval *result, intermediary_ast_function_type func, char 
op_count) {
-       zend_ast *ast = emalloc(sizeof(zend_ast));
+       zend_ast *ast = emalloc(sizeof(zend_ast) + op_count * sizeof(zval *));
        ast->op_count = op_count;
-       ast->ops = emalloc(op_count * sizeof(zval *));
+       ast->ops = (zval **)(ast + 1);
        ast->refcount = 1;
        ast->func = func;
        Z_AST_P(result) = ast;
@@ -66,23 +42,23 @@ void zend_ast_add(zval *result, 
intermediary_ast_function_type func, char op_cou
 /* Do operations on constant operators at compile time (AST building time) */
 
 void zend_ast_add_unary(zval *result, unary_ast_func func, zval *op0 
TSRMLS_DC) {
-       OP_IS_NOT_CONST_THEN(op0,
+       if (!op0 || !IS_CONSTANT_TYPE(Z_TYPE_P(op0))) {
                func(result, op0 TSRMLS_CC);
-               zval_dtor(op0);
+               if (op0) zval_dtor(op0);
                return;
-       )
+       }
 
        zend_ast_add(result, (intermediary_ast_function_type)func, 1);
        COPY_ZVAL_TO_OP(0)
 }
 
 void zend_ast_add_binary(zval *result, binary_ast_func func, zval *op0, zval 
*op1 TSRMLS_DC) {
-       OP_IS_NOT_CONST_THEN(op0, OP_IS_NOT_CONST_THEN(op1,
+       if ((!op0 || !IS_CONSTANT_TYPE(Z_TYPE_P(op0))) && (!op1 || 
!IS_CONSTANT_TYPE(Z_TYPE_P(op1)))) {
                func(result, op0, op1 TSRMLS_CC);
-               zval_dtor(op0);
-               zval_dtor(op1);
+               if (op0) zval_dtor(op0);
+               if (op1) zval_dtor(op1);
                return;
-       ))
+       }
        
        zend_ast_add(result, (intermediary_ast_function_type)func, 2);
        COPY_ZVAL_TO_OP(0)
@@ -90,13 +66,13 @@ void zend_ast_add_binary(zval *result, binary_ast_func 
func, zval *op0, zval *op
 }
 
 void zend_ast_add_ternary(zval *result, ternary_ast_func func, zval *op0, zval 
*op1, zval *op2 TSRMLS_DC) {
-       OP_IS_NOT_CONST_THEN(op0, OP_IS_NOT_CONST_THEN(op1, 
OP_IS_NOT_CONST_THEN(op2, 
+       if ((!op0 || !IS_CONSTANT_TYPE(Z_TYPE_P(op0))) && (!op1 || 
!IS_CONSTANT_TYPE(Z_TYPE_P(op1))) && (!op2 || 
!IS_CONSTANT_TYPE(Z_TYPE_P(op2)))) { 
                func(result, op0, op1, op2 TSRMLS_CC);
-               zval_dtor(op0);
-               zval_dtor(op1);
-               zval_dtor(op2);
+               if (op0) zval_dtor(op0);
+               if (op1) zval_dtor(op1);
+               if (op2) zval_dtor(op2);
                return;
-       )))
+       }
        
        zend_ast_add(result, (intermediary_ast_function_type)func, 3);
        COPY_ZVAL_TO_OP(0)
@@ -106,26 +82,38 @@ void zend_ast_add_ternary(zval *result, ternary_ast_func 
func, zval *op0, zval *
 
 void zend_ast_evaluate(zval *result, zend_ast *ast TSRMLS_DC) {
        int i;
+       zval **ops = emalloc((sizeof(zval *) + sizeof(zval)) * ast->op_count);
 
        for (i = ast->op_count; i--;) {
-               if (ast->ops[i]) {
-                       OP_IS_CONST_THEN(ast->ops[i],
-                               zval_update_constant_ex(&ast->ops[i], (void 
*)1, NULL TSRMLS_CC);
-                       )
+               if (ast->ops[i] && IS_CONSTANT_TYPE(Z_TYPE_P(ast->ops[i]))) {
+                       ops[i] = ((zval *)(ops + ast->op_count)) + i;
+                       *ops[i] = *ast->ops[i];
+                       zval_copy_ctor(ops[i]);
+                       zval_update_constant_ex(&ops[i], (void *)1, NULL 
TSRMLS_CC);
+               } else {
+                       ops[i] = ast->ops[i];
                }
        }
 
        switch (ast->op_count) {
                case 1:
-                       ((unary_ast_func)ast->func)(result, ast->ops[0] 
TSRMLS_CC);
+                       ((unary_ast_func)ast->func)(result, ops[0] TSRMLS_CC);
                        break;
                case 2:
-                       ((binary_ast_func)ast->func)(result, ast->ops[0], 
ast->ops[1] TSRMLS_CC);
+                       ((binary_ast_func)ast->func)(result, ops[0], ops[1] 
TSRMLS_CC);
                        break;
                case 3:
-                       ((ternary_ast_func)ast->func)(result, ast->ops[0], 
ast->ops[1], ast->ops[2] TSRMLS_CC);
+                       ((ternary_ast_func)ast->func)(result, ops[0], ops[1], 
ops[2] TSRMLS_CC);
                        break;
        }
+
+       for (i = ast->op_count; i--;) {
+               if (ast->ops[i] != ops[i]) {
+                       zval_dtor(ops[i]);
+               }
+       }
+       
+       efree(ops);
 }
 
 void zend_ast_destroy(zend_ast *ast TSRMLS_DC) {
@@ -138,6 +126,5 @@ void zend_ast_destroy(zend_ast *ast TSRMLS_DC) {
                }
        }
 
-       efree(ast->ops);
        efree(ast);
 }
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index b3b7529..049864c 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -946,11 +946,8 @@ static void add_class_vars(zend_class_entry *ce, int 
statics, zval *return_value
 
                /* this is necessary to make it able to work with default array
                 * properties, returned to user */
-               switch (Z_TYPE_P(prop_copy) & IS_CONSTANT_TYPE_MASK) {
-                       case IS_CONSTANT:
-                       case IS_CONSTANT_ARRAY:
-                       case IS_CONSTANT_AST:
-                               zval_update_constant(&prop_copy, 0 TSRMLS_CC);
+               switch (IS_CONSTANT_TYPE(Z_TYPE_P(prop_copy))) {
+                       zval_update_constant(&prop_copy, 0 TSRMLS_CC);
                }
 
                add_assoc_zval(return_value, key, prop_copy);
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index f3bf5be..c51d173 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -5529,9 +5529,7 @@ static zend_constant* zend_get_ct_const(const zval 
*const_name, int all_internal
        if (all_internal_constants_substitution &&
            (c->flags & CONST_PERSISTENT) &&
            !(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION) &&
-           Z_TYPE(c->value) != IS_CONSTANT &&
-           Z_TYPE(c->value) != IS_CONSTANT_ARRAY &&
-           Z_TYPE(c->value) != IS_CONSTANT_AST) {
+           !IS_CONSTANT_TYPE(Z_TYPE(c->value))) {
                return c;
        }
        return NULL;
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index e5b68c7..12047f0 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -520,8 +520,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, 
zend_class_entry *sco
                                        }
                                        if (actual[0] == '\\') {
                                                if (inline_change) {
-                                                       memmove(Z_STRVAL_P(p), 
Z_STRVAL_P(p)+1, Z_STRLEN_P(p));
-                                                               --Z_STRLEN_P(p);
+                                                       memmove(Z_STRVAL_P(p), 
Z_STRVAL_P(p)+1, Z_STRLEN_P(p)--);
                                                } else {
                                                        ++actual;
                                                }
@@ -626,7 +625,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, 
zend_class_entry *sco
                                                if ((str_index[str_index_len - 
2] & IS_CONSTANT_UNQUALIFIED) == 0) {
                                                        zend_error(E_ERROR, 
"Undefined constant '%s'", save);
                                                }
-                                               zend_error(E_NOTICE, "Use of 
undefined constant %s - assumed '%s'",     str_index, str_index);
+                                               zend_error(E_NOTICE, "Use of 
undefined constant %s - assumed '%s'", str_index, str_index);
                                        }
                                        ZVAL_STRINGL(&const_value, str_index, 
str_index_len-3, 1);
                                }
@@ -640,7 +639,7 @@ ZEND_API int zval_update_constant_ex(zval **pp, void *arg, 
zend_class_entry *sco
 
                                        /* preserve this bit for inheritance */
                                        Z_TYPE_PP(element) |= IS_CONSTANT_INDEX;
-                                               zval_ptr_dtor(element);
+                                       zval_ptr_dtor(element);
                                        *element = new_val;
                                }
 
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 4ee5a99..006f2ec 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -3252,16 +3252,11 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
        if (param == NULL) {
                ALLOC_ZVAL(assignment_value);
                *assignment_value = *opline->op2.zv;
-               switch (Z_TYPE_P(assignment_value) & IS_CONSTANT_TYPE_MASK) {
-                       case IS_CONSTANT:
-                       case IS_CONSTANT_ARRAY:
-                       case IS_CONSTANT_AST:
-                               Z_SET_REFCOUNT_P(assignment_value, 1);
-                               zval_update_constant(&assignment_value, 0 
TSRMLS_CC);
-                               break;
-                       default:
-                               zval_copy_ctor(assignment_value);
-                               break;
+               if (IS_CONSTANT_TYPE(Z_TYPE_P(assignment_value))) {
+                       Z_SET_REFCOUNT_P(assignment_value, 1);
+                       zval_update_constant(&assignment_value, 0 TSRMLS_CC);
+               } else {
+                       zval_copy_ctor(assignment_value);
                }
                INIT_PZVAL(assignment_value);
        } else {
@@ -3584,16 +3579,12 @@ ZEND_VM_HANDLER(99, ZEND_FETCH_CONSTANT, 
VAR|CONST|UNUSED, CONST)
                }
 
                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, 
Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, 
Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
-                       switch (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) {
-                               case IS_CONSTANT:
-                               case IS_CONSTANT_ARRAY:
-                               case IS_CONSTANT_AST: {
-                                       zend_class_entry *old_scope = EG(scope);
-
-                                       EG(scope) = ce;
-                                       zval_update_constant(value, (void *) 1 
TSRMLS_CC);
-                                       EG(scope) = old_scope;
-                               }
+                       if (IS_CONSTANT_TYPE(Z_TYPE_PP(value))) {
+                               zend_class_entry *old_scope = EG(scope);
+
+                               EG(scope) = ce;
+                               zval_update_constant(value, (void *) 1 
TSRMLS_CC);
+                               EG(scope) = old_scope;
                        }
                        if (OP1_TYPE == IS_CONST) {
                                CACHE_PTR(opline->op2.literal->cache_slot, 
value);
@@ -5194,28 +5185,22 @@ ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST)
        name  = GET_OP1_ZVAL_PTR(BP_VAR_R);
        val   = GET_OP2_ZVAL_PTR(BP_VAR_R);
 
-       switch (Z_TYPE_P(val) & IS_CONSTANT_TYPE_MASK) {
-               case IS_CONSTANT:
-               case IS_CONSTANT_ARRAY:
-               case IS_CONSTANT_AST: {
-                       zval tmp;
-                       zval *tmp_ptr = &tmp;
+       if (IS_CONSTANT_TYPE(Z_TYPE_P(val))) {
+               zval tmp;
+               zval *tmp_ptr = &tmp;
 
-                       ZVAL_COPY_VALUE(&tmp, val);
-                       if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
-                               zval_copy_ctor(&tmp);
-                       }
-                       INIT_PZVAL(&tmp);
-                       zval_update_constant(&tmp_ptr, NULL TSRMLS_CC);
-                       c.value = *tmp_ptr;
+               ZVAL_COPY_VALUE(&tmp, val);
+               if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
+                       zval_copy_ctor(&tmp);
                }
-               break;
-
-               default:
-                       INIT_PZVAL_COPY(&c.value, val);
-                       zval_copy_ctor(&c.value);
-                       break;
+               INIT_PZVAL(&tmp);
+               zval_update_constant(&tmp_ptr, NULL TSRMLS_CC);
+               c.value = *tmp_ptr;
+       } else {
+               INIT_PZVAL_COPY(&c.value, val);
+               zval_copy_ctor(&c.value);
        }
+
        c.flags = CONST_CS; /* non persistent, case sensetive */
        c.name = str_strndup(Z_STRVAL_P(name), Z_STRLEN_P(name));
        c.name_len = Z_STRLEN_P(name)+1;
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index a90f187..d99bcd1 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1435,16 +1435,11 @@ static int ZEND_FASTCALL  
ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_
        if (param == NULL) {
                ALLOC_ZVAL(assignment_value);
                *assignment_value = *opline->op2.zv;
-               switch (Z_TYPE_P(assignment_value) & IS_CONSTANT_TYPE_MASK) {
-                       case IS_CONSTANT:
-                       case IS_CONSTANT_ARRAY:
-                       case IS_CONSTANT_AST:
-                               Z_SET_REFCOUNT_P(assignment_value, 1);
-                               zval_update_constant(&assignment_value, 0 
TSRMLS_CC);
-                               break;
-                       default:
-                               zval_copy_ctor(assignment_value);
-                               break;
+               if (IS_CONSTANT_TYPE(Z_TYPE_P(assignment_value))) {
+                       Z_SET_REFCOUNT_P(assignment_value, 1);
+                       zval_update_constant(&assignment_value, 0 TSRMLS_CC);
+               } else {
+                       zval_copy_ctor(assignment_value);
                }
                INIT_PZVAL(assignment_value);
        } else {
@@ -3796,16 +3791,12 @@ static int ZEND_FASTCALL  
ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCO
                }
 
                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, 
Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, 
Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
-                       switch (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) {
-                               case IS_CONSTANT:
-                               case IS_CONSTANT_ARRAY:
-                               case IS_CONSTANT_AST: {
-                                       zend_class_entry *old_scope = EG(scope);
+                       if (IS_CONSTANT_TYPE(Z_TYPE_PP(value))) {
+                               zend_class_entry *old_scope = EG(scope);
 
-                                       EG(scope) = ce;
-                                       zval_update_constant(value, (void *) 1 
TSRMLS_CC);
-                                       EG(scope) = old_scope;
-                               }
+                               EG(scope) = ce;
+                               zval_update_constant(value, (void *) 1 
TSRMLS_CC);
+                               EG(scope) = old_scope;
                        }
                        if (IS_CONST == IS_CONST) {
                                CACHE_PTR(opline->op2.literal->cache_slot, 
value);
@@ -4096,28 +4087,22 @@ static int ZEND_FASTCALL  
ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCOD
        name  = opline->op1.zv;
        val   = opline->op2.zv;
 
-       switch (Z_TYPE_P(val) & IS_CONSTANT_TYPE_MASK) {
-               case IS_CONSTANT:
-               case IS_CONSTANT_ARRAY:
-               case IS_CONSTANT_AST: {
-                       zval tmp;
-                       zval *tmp_ptr = &tmp;
+       if (IS_CONSTANT_TYPE(Z_TYPE_P(val))) {
+               zval tmp;
+               zval *tmp_ptr = &tmp;
 
-                       ZVAL_COPY_VALUE(&tmp, val);
-                       if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
-                               zval_copy_ctor(&tmp);
-                       }
-                       INIT_PZVAL(&tmp);
-                       zval_update_constant(&tmp_ptr, NULL TSRMLS_CC);
-                       c.value = *tmp_ptr;
+               ZVAL_COPY_VALUE(&tmp, val);
+               if (Z_TYPE_P(val) == IS_CONSTANT_ARRAY) {
+                       zval_copy_ctor(&tmp);
                }
-               break;
-
-               default:
-                       INIT_PZVAL_COPY(&c.value, val);
-                       zval_copy_ctor(&c.value);
-                       break;
+               INIT_PZVAL(&tmp);
+               zval_update_constant(&tmp_ptr, NULL TSRMLS_CC);
+               c.value = *tmp_ptr;
+       } else {
+               INIT_PZVAL_COPY(&c.value, val);
+               zval_copy_ctor(&c.value);
        }
+
        c.flags = CONST_CS; /* non persistent, case sensetive */
        c.name = str_strndup(Z_STRVAL_P(name), Z_STRLEN_P(name));
        c.name_len = Z_STRLEN_P(name)+1;
@@ -15649,16 +15634,12 @@ static int ZEND_FASTCALL  
ZEND_FETCH_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE
                }
 
                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, 
Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, 
Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
-                       switch (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) {
-                               case IS_CONSTANT:
-                               case IS_CONSTANT_ARRAY:
-                               case IS_CONSTANT_AST: {
-                                       zend_class_entry *old_scope = EG(scope);
+                       if (IS_CONSTANT_TYPE(Z_TYPE_PP(value))) {
+                               zend_class_entry *old_scope = EG(scope);
 
-                                       EG(scope) = ce;
-                                       zval_update_constant(value, (void *) 1 
TSRMLS_CC);
-                                       EG(scope) = old_scope;
-                               }
+                               EG(scope) = ce;
+                               zval_update_constant(value, (void *) 1 
TSRMLS_CC);
+                               EG(scope) = old_scope;
                        }
                        if (IS_VAR == IS_CONST) {
                                CACHE_PTR(opline->op2.literal->cache_slot, 
value);
@@ -25188,16 +25169,12 @@ static int ZEND_FASTCALL  
ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPC
                }
 
                if (EXPECTED(zend_hash_quick_find(&ce->constants_table, 
Z_STRVAL_P(opline->op2.zv), Z_STRLEN_P(opline->op2.zv)+1, 
Z_HASH_P(opline->op2.zv), (void **) &value) == SUCCESS)) {
-                       switch (Z_TYPE_PP(value) & IS_CONSTANT_TYPE_MASK) {
-                               case IS_CONSTANT:
-                               case IS_CONSTANT_ARRAY:
-                               case IS_CONSTANT_AST: {
-                                       zend_class_entry *old_scope = EG(scope);
+                       if (IS_CONSTANT_TYPE(Z_TYPE_PP(value))) {
+                               zend_class_entry *old_scope = EG(scope);
 
-                                       EG(scope) = ce;
-                                       zval_update_constant(value, (void *) 1 
TSRMLS_CC);
-                                       EG(scope) = old_scope;
-                               }
+                               EG(scope) = ce;
+                               zval_update_constant(value, (void *) 1 
TSRMLS_CC);
+                               EG(scope) = old_scope;
                        }
                        if (IS_UNUSED == IS_CONST) {
                                CACHE_PTR(opline->op2.literal->cache_slot, 
value);
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index abebc21..bff5e66 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -2599,14 +2599,8 @@ ZEND_METHOD(reflection_parameter, getDefaultValue)
 
        *return_value = *precv->op2.zv;
        INIT_PZVAL(return_value);
-       switch (Z_TYPE_P(return_value) & IS_CONSTANT_TYPE_MASK) {
-               case IS_CONSTANT:
-               case IS_CONSTANT_ARRAY:
-               case IS_CONSTANT_AST:
-                       break;
-
-               default:
-                       zval_copy_ctor(return_value);
+       if (!IS_CONSTANT_TYPE(Z_TYPE_P(return_value))) {
+               zval_copy_ctor(return_value);
        }
        zval_update_constant_ex(&return_value, (void*)0, 
param->fptr->common.scope TSRMLS_CC);
 }
@@ -3419,11 +3413,8 @@ static void add_class_vars(zend_class_entry *ce, int 
statics, zval *return_value
 
                /* this is necessary to make it able to work with default array
                * properties, returned to user */
-               switch (Z_TYPE_P(prop_copy) & IS_CONSTANT_TYPE_MASK) {
-                       case IS_CONSTANT:
-                       case IS_CONSTANT_ARRAY:
-                       case IS_CONSTANT_AST:
-                               zval_update_constant(&prop_copy, (void *) 1 
TSRMLS_CC);
+               if (IS_CONSTANT_TYPE(Z_TYPE_P(prop_copy))) {
+                       zval_update_constant(&prop_copy, (void *) 1 TSRMLS_CC);
                }
 
                add_assoc_zval(return_value, key, prop_copy);
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to