Skip to content

Commit 2a961fd

Browse files
Update expression.py
1 parent afe5f2f commit 2a961fd

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

mypyc/irbuild/expression.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -785,18 +785,22 @@ def try_specialize_in_expr(
785785
items = [builder.accept(item) for item in rhs.items]
786786
elif isinstance(builder.node_type(rhs), RTuple):
787787
left = builder.accept(lhs)
788-
tuple_val = builder.accept(rhs)
789-
assert isinstance(tuple_val.type, RTuple)
790788
proper_type = get_proper_type(builder.types[rhs])
791789
assert isinstance(proper_type, TupleType)
792-
items = [
793-
(
794-
LoadLiteral(typ.value, object_rprimitive)
795-
if isinstance(typ, LiteralType)
796-
else builder.add(TupleGet(tuple_val, i))
797-
)
798-
for i, typ in enumerate(map(try_getting_literal, proper_type.items))
799-
]
790+
literal_items = list(map(try_getting_literal, proper_type.items))
791+
if None not in literal_items:
792+
# If all tuple items are literals we don't even need to accept the tuple
793+
# TODO: should we use object_rprimitive? prob not, what do?
794+
items = [LoadLiteral(literal.value, object_rprimitive) for literal in literal_items]
795+
else:
796+
tuple_val = builder.accept(rhs)
797+
assert isinstance(tuple_val.type, RTuple)
798+
proper_type = get_proper_type(builder.types[rhs])
799+
items = [
800+
# TODO: should we use object_rprimitive? prob not, what do?
801+
LoadLiteral(typ.value, object_rprimitive) if isinstance(typ, LiteralType) else builder.add(TupleGet(tuple_val, i))
802+
for i, typ in enumerate(map(try_getting_literal, proper_type.items))
803+
]
800804

801805
if items is not None:
802806
assert left is not None

0 commit comments

Comments
 (0)