From: Nikita Popov Date: Fri, 4 Jan 2019 11:10:22 +0000 (+0100) Subject: Resolve parent::class at compile-time if possible X-Git-Tag: php-7.4.0alpha1~1289 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ca217f506afe86e1e638782474df6c11d0a6380;p=php Resolve parent::class at compile-time if possible And remove some dead code. --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 08c9d97042..c5c9f1f475 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1390,8 +1390,14 @@ static zend_bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_a return 1; } return 0; - case ZEND_FETCH_CLASS_STATIC: case ZEND_FETCH_CLASS_PARENT: + if (CG(active_class_entry) && CG(active_class_entry)->parent_name + && zend_is_scope_known()) { + ZVAL_STR_COPY(zv, CG(active_class_entry)->parent_name); + return 1; + } + return 0; + case ZEND_FETCH_CLASS_STATIC: return 0; case ZEND_FETCH_CLASS_DEFAULT: ZVAL_STR(zv, zend_resolve_class_name_ast(class_ast)); @@ -7722,38 +7728,6 @@ void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */ } /* }}} */ -void zend_compile_resolve_class_name(znode *result, zend_ast *ast) /* {{{ */ -{ - zend_ast *name_ast = ast->child[0]; - uint32_t fetch_type = zend_get_class_fetch_type(zend_ast_get_str(name_ast)); - zend_ensure_valid_class_fetch_type(fetch_type); - - switch (fetch_type) { - case ZEND_FETCH_CLASS_SELF: - if (CG(active_class_entry) && zend_is_scope_known()) { - result->op_type = IS_CONST; - ZVAL_STR_COPY(&result->u.constant, CG(active_class_entry)->name); - } else { - zend_op *opline = zend_emit_op_tmp(result, ZEND_FETCH_CLASS_NAME, NULL, NULL); - opline->op1.num = fetch_type; - } - break; - case ZEND_FETCH_CLASS_STATIC: - case ZEND_FETCH_CLASS_PARENT: - { - zend_op *opline = zend_emit_op_tmp(result, ZEND_FETCH_CLASS_NAME, NULL, NULL); - opline->op1.num = fetch_type; - } - break; - case ZEND_FETCH_CLASS_DEFAULT: - result->op_type = IS_CONST; - ZVAL_STR(&result->u.constant, zend_resolve_class_name_ast(name_ast)); - break; - EMPTY_SWITCH_DEFAULT_CASE() - } -} -/* }}} */ - static zend_op *zend_compile_rope_add(znode *result, uint32_t num, znode *elem_node) /* {{{ */ { zend_op *opline = get_next_op();