diff --git a/mypy/constant_fold.py b/mypy/constant_fold.py index 4582b2a7396d..7709debb4f57 100644 --- a/mypy/constant_fold.py +++ b/mypy/constant_fold.py @@ -8,6 +8,7 @@ from typing import Final, Union from mypy.nodes import ( + CastExpr, ComplexExpr, Expression, FloatExpr, @@ -73,6 +74,8 @@ def constant_fold_expr(expr: Expression, cur_mod_id: str) -> ConstantValue | Non value = constant_fold_expr(expr.expr, cur_mod_id) if value is not None: return constant_fold_unary_op(expr.op, value) + elif isinstance(expr, CastExpr): + return constant_fold_expr(expr.expr, cur_mod_id) return None diff --git a/mypyc/irbuild/constant_fold.py b/mypyc/irbuild/constant_fold.py index 12a4b15dd40c..73eb5777cbeb 100644 --- a/mypyc/irbuild/constant_fold.py +++ b/mypyc/irbuild/constant_fold.py @@ -15,6 +15,7 @@ from mypy.constant_fold import constant_fold_binary_op, constant_fold_unary_op from mypy.nodes import ( BytesExpr, + CastExpr, ComplexExpr, Expression, FloatExpr, @@ -72,6 +73,8 @@ def constant_fold_expr(builder: IRBuilder, expr: Expression) -> ConstantValue | value = constant_fold_expr(builder, expr.expr) if value is not None and not isinstance(value, bytes): return constant_fold_unary_op(expr.op, value) + elif isinstance(expr, CastExpr): + return constant_fold_expr(builder, expr.expr) return None diff --git a/mypyc/irbuild/expression.py b/mypyc/irbuild/expression.py index 59ecc4ac2c5c..7d278a3bee02 100644 --- a/mypyc/irbuild/expression.py +++ b/mypyc/irbuild/expression.py @@ -518,6 +518,7 @@ def translate_super_method_call(builder: IRBuilder, expr: CallExpr, callee: Supe return builder.builder.call(decl, arg_values, arg_kinds, arg_names, expr.line) +@folding_candidate def translate_cast_expr(builder: IRBuilder, expr: CastExpr) -> Value: src = builder.accept(expr.expr) target_type = builder.type_to_rtype(expr.type)