Skip to content

Commit 61a21ba

Browse files
authored
Micro-optimization: avoid Bogus[int] types that cause needless boxing (#14354)
I want to get rid of all the bogus types eventually.
1 parent 632304f commit 61a21ba

File tree

1 file changed

+15
-12
lines changed

1 file changed

+15
-12
lines changed

mypy/types.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@
153153
# A placeholder used for Bogus[...] parameters
154154
_dummy: Final[Any] = object()
155155

156+
# A placeholder for int parameters
157+
_dummy_int: Final = -999999
158+
156159

157160
class TypeOfAny:
158161
"""
@@ -540,8 +543,8 @@ def copy_modified(
540543
values: Bogus[list[Type]] = _dummy,
541544
upper_bound: Bogus[Type] = _dummy,
542545
id: Bogus[TypeVarId | int] = _dummy,
543-
line: Bogus[int] = _dummy,
544-
column: Bogus[int] = _dummy,
546+
line: int = _dummy_int,
547+
column: int = _dummy_int,
545548
) -> TypeVarType:
546549
return TypeVarType(
547550
self.name,
@@ -550,8 +553,8 @@ def copy_modified(
550553
self.values if values is _dummy else values,
551554
self.upper_bound if upper_bound is _dummy else upper_bound,
552555
self.variance,
553-
self.line if line is _dummy else line,
554-
self.column if column is _dummy else column,
556+
self.line if line == _dummy_int else line,
557+
self.column if column == _dummy_int else column,
555558
)
556559

557560
def accept(self, visitor: TypeVisitor[T]) -> T:
@@ -658,14 +661,14 @@ def copy_modified(
658661
self,
659662
*,
660663
id: Bogus[TypeVarId | int] = _dummy,
661-
flavor: Bogus[int] = _dummy,
664+
flavor: int = _dummy_int,
662665
prefix: Bogus[Parameters] = _dummy,
663666
) -> ParamSpecType:
664667
return ParamSpecType(
665668
self.name,
666669
self.fullname,
667670
id if id is not _dummy else self.id,
668-
flavor if flavor is not _dummy else self.flavor,
671+
flavor if flavor != _dummy_int else self.flavor,
669672
self.upper_bound,
670673
line=self.line,
671674
column=self.column,
@@ -1024,10 +1027,10 @@ def accept(self, visitor: TypeVisitor[T]) -> T:
10241027
def copy_modified(
10251028
self,
10261029
# Mark with Bogus because _dummy is just an object (with type Any)
1027-
type_of_any: Bogus[int] = _dummy,
1030+
type_of_any: int = _dummy_int,
10281031
original_any: Bogus[AnyType | None] = _dummy,
10291032
) -> AnyType:
1030-
if type_of_any is _dummy:
1033+
if type_of_any == _dummy_int:
10311034
type_of_any = self.type_of_any
10321035
if original_any is _dummy:
10331036
original_any = self.source_any
@@ -1745,8 +1748,8 @@ def copy_modified(
17451748
name: Bogus[str | None] = _dummy,
17461749
definition: Bogus[SymbolNode] = _dummy,
17471750
variables: Bogus[Sequence[TypeVarLikeType]] = _dummy,
1748-
line: Bogus[int] = _dummy,
1749-
column: Bogus[int] = _dummy,
1751+
line: int = _dummy_int,
1752+
column: int = _dummy_int,
17501753
is_ellipsis_args: Bogus[bool] = _dummy,
17511754
implicit: Bogus[bool] = _dummy,
17521755
special_sig: Bogus[str | None] = _dummy,
@@ -1766,8 +1769,8 @@ def copy_modified(
17661769
name=name if name is not _dummy else self.name,
17671770
definition=definition if definition is not _dummy else self.definition,
17681771
variables=variables if variables is not _dummy else self.variables,
1769-
line=line if line is not _dummy else self.line,
1770-
column=column if column is not _dummy else self.column,
1772+
line=line if line != _dummy_int else self.line,
1773+
column=column if column != _dummy_int else self.column,
17711774
is_ellipsis_args=(
17721775
is_ellipsis_args if is_ellipsis_args is not _dummy else self.is_ellipsis_args
17731776
),

0 commit comments

Comments
 (0)