]> granicus.if.org Git - php/commitdiff
Fixed compile-time constants substitution
authorDmitry Stogov <dmitry@zend.com>
Tue, 26 Aug 2014 09:06:19 +0000 (13:06 +0400)
committerDmitry Stogov <dmitry@zend.com>
Tue, 26 Aug 2014 09:06:19 +0000 (13:06 +0400)
Zend/zend_compile.c

index aee61586d4ddcbe0546a228181f2a59e307580f1..81c05965781e324a455f89ab13e0ddd844d95275 100644 (file)
@@ -2800,8 +2800,7 @@ static int zend_constant_ct_subst(znode *result, zval *const_name, int all_inter
 
        if (c) {
                result->op_type = IS_CONST;
-               result->u.constant = c->value;
-               zval_copy_ctor(&result->u.constant);
+               ZVAL_DUP(&result->u.constant, &c->value);
                return 1;
        }
        return 0;
@@ -7661,6 +7660,16 @@ void zend_eval_const_expr(zend_ast **ast_ptr TSRMLS_DC) {
                                return;
                        }
                        break;
+               case ZEND_AST_CONST: {
+                       znode result_node;
+
+                       if (!zend_constant_ct_subst(&result_node, zend_ast_get_zval(ast->child[0]), 0 TSRMLS_CC)) {
+                               return;
+                       }
+                       zend_ast_destroy(ast);
+                       *ast_ptr = zend_ast_create_zval(&result_node.u.constant);
+                       return;
+               }
                default:
                        return;
        }