]> granicus.if.org Git - php/commitdiff
Make special assert() handling independent of compiler flags
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 29 Jan 2019 08:39:12 +0000 (09:39 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 29 Jan 2019 08:39:12 +0000 (09:39 +0100)
Zend/zend_compile.c

index 46ca21a4367b4e5ee0c86ce9bac74447bcb5625e..7c02f05e78bdc780df6f5a362853d8116c83aace 100644 (file)
@@ -3630,7 +3630,7 @@ int zend_compile_func_cuf(znode *result, zend_ast_list *args, zend_string *lcnam
 }
 /* }}} */
 
-static int zend_compile_assert(znode *result, zend_ast_list *args, zend_string *name, zend_function *fbc) /* {{{ */
+static void zend_compile_assert(znode *result, zend_ast_list *args, zend_string *name, zend_function *fbc) /* {{{ */
 {
        if (EG(assertions) >= 0) {
                znode name_node;
@@ -3673,8 +3673,6 @@ static int zend_compile_assert(znode *result, zend_ast_list *args, zend_string *
                result->op_type = IS_CONST;
                ZVAL_TRUE(&result->u.constant);
        }
-
-       return SUCCESS;
 }
 /* }}} */
 
@@ -3882,10 +3880,6 @@ int zend_try_compile_special_func(znode *result, zend_string *lcname, zend_ast_l
                return FAILURE;
        }
 
-       if (zend_string_equals_literal(lcname, "assert")) {
-               return zend_compile_assert(result, args, lcname, fbc);
-       }
-
        if (CG(compiler_options) & ZEND_COMPILE_NO_BUILTINS) {
                return FAILURE;
        }
@@ -3988,8 +3982,16 @@ void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */
                zend_op *opline;
 
                lcname = zend_string_tolower(Z_STR_P(name));
-
                fbc = zend_hash_find_ptr(CG(function_table), lcname);
+
+               /* Special assert() handling should apply independently of compiler flags. */
+               if (fbc && zend_string_equals_literal(lcname, "assert")) {
+                       zend_compile_assert(result, zend_ast_get_list(args_ast), lcname, fbc);
+                       zend_string_release(lcname);
+                       zval_ptr_dtor(&name_node.u.constant);
+                       return;
+               }
+
                if (!fbc
                 || (fbc->type == ZEND_INTERNAL_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS))
                 || (fbc->type == ZEND_USER_FUNCTION && (CG(compiler_options) & ZEND_COMPILE_IGNORE_USER_FUNCTIONS))