Skip to content

Commit 2db5a2a

Browse files
committed
[mypyc] feat: exact_dict_rprimitive
1 parent 9ae3e9a commit 2db5a2a

File tree

1 file changed

+14
-2
lines changed

1 file changed

+14
-2
lines changed

mypyc/ir/rtypes.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -487,8 +487,13 @@ def __hash__(self) -> int:
487487
"builtins.list", is_unboxed=False, is_refcounted=True, may_be_immortal=False
488488
)
489489

490-
# Python dict object (or an instance of a subclass of dict).
490+
# Python dict object.
491+
exact_dict_rprimitive: Final = RPrimitive(
492+
"builtins.dict[exact]", is_unboxed=False, is_refcounted=True)
493+
)
494+
491495
dict_rprimitive: Final = RPrimitive("builtins.dict", is_unboxed=False, is_refcounted=True)
496+
# An instance of a subclass of dict.
492497

493498
# Python set object (or an instance of a subclass of set).
494499
set_rprimitive: Final = RPrimitive("builtins.set", is_unboxed=False, is_refcounted=True)
@@ -608,7 +613,14 @@ def is_list_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
608613

609614

610615
def is_dict_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
611-
return isinstance(rtype, RPrimitive) and rtype.name == "builtins.dict"
616+
return isinstance(rtype, RPrimitive) and rtype.name in (
617+
"builtins.dict",
618+
"builtins.dict[exact]",
619+
)
620+
621+
622+
def is_exact_dict_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:
623+
return isinstance(rtype, RPrimitive) and rtype.name == "builtins.dict[exact]"
612624

613625

614626
def is_set_rprimitive(rtype: RType) -> TypeGuard[RPrimitive]:

0 commit comments

Comments
 (0)