Skip to content

Commit 9ca217f

Browse files
committed
Resolve parent::class at compile-time if possible
And remove some dead code.
1 parent a9e6667 commit 9ca217f

File tree

1 file changed

+7
-33
lines changed

1 file changed

+7
-33
lines changed

Zend/zend_compile.c

Lines changed: 7 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,8 +1390,14 @@ static zend_bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_a
13901390
return 1;
13911391
}
13921392
return 0;
1393-
case ZEND_FETCH_CLASS_STATIC:
13941393
case ZEND_FETCH_CLASS_PARENT:
1394+
if (CG(active_class_entry) && CG(active_class_entry)->parent_name
1395+
&& zend_is_scope_known()) {
1396+
ZVAL_STR_COPY(zv, CG(active_class_entry)->parent_name);
1397+
return 1;
1398+
}
1399+
return 0;
1400+
case ZEND_FETCH_CLASS_STATIC:
13951401
return 0;
13961402
case ZEND_FETCH_CLASS_DEFAULT:
13971403
ZVAL_STR(zv, zend_resolve_class_name_ast(class_ast));
@@ -7722,38 +7728,6 @@ void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */
77227728
}
77237729
/* }}} */
77247730

7725-
void zend_compile_resolve_class_name(znode *result, zend_ast *ast) /* {{{ */
7726-
{
7727-
zend_ast *name_ast = ast->child[0];
7728-
uint32_t fetch_type = zend_get_class_fetch_type(zend_ast_get_str(name_ast));
7729-
zend_ensure_valid_class_fetch_type(fetch_type);
7730-
7731-
switch (fetch_type) {
7732-
case ZEND_FETCH_CLASS_SELF:
7733-
if (CG(active_class_entry) && zend_is_scope_known()) {
7734-
result->op_type = IS_CONST;
7735-
ZVAL_STR_COPY(&result->u.constant, CG(active_class_entry)->name);
7736-
} else {
7737-
zend_op *opline = zend_emit_op_tmp(result, ZEND_FETCH_CLASS_NAME, NULL, NULL);
7738-
opline->op1.num = fetch_type;
7739-
}
7740-
break;
7741-
case ZEND_FETCH_CLASS_STATIC:
7742-
case ZEND_FETCH_CLASS_PARENT:
7743-
{
7744-
zend_op *opline = zend_emit_op_tmp(result, ZEND_FETCH_CLASS_NAME, NULL, NULL);
7745-
opline->op1.num = fetch_type;
7746-
}
7747-
break;
7748-
case ZEND_FETCH_CLASS_DEFAULT:
7749-
result->op_type = IS_CONST;
7750-
ZVAL_STR(&result->u.constant, zend_resolve_class_name_ast(name_ast));
7751-
break;
7752-
EMPTY_SWITCH_DEFAULT_CASE()
7753-
}
7754-
}
7755-
/* }}} */
7756-
77577731
static zend_op *zend_compile_rope_add(znode *result, uint32_t num, znode *elem_node) /* {{{ */
77587732
{
77597733
zend_op *opline = get_next_op();

0 commit comments

Comments
 (0)