Skip to content

Commit bb9682e

Browse files
committed
Cache bool
1 parent 83d1736 commit bb9682e

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

mypy/checker.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,10 +432,11 @@ def __init__(
432432
self, self.msg, self.plugin, per_line_checking_time_ns
433433
)
434434

435-
self._object_type: Instance | None = None
436-
self._int_type: Instance | None = None
437435
self._str_type: Instance | None = None
438436
self._function_type: Instance | None = None
437+
self._int_type: Instance | None = None
438+
self._bool_type: Instance | None = None
439+
self._object_type: Instance | None = None
439440

440441
self.pattern_checker = PatternChecker(self, self.msg, self.plugin, options)
441442
self._unique_id = 0
@@ -7387,6 +7388,10 @@ def named_type(self, name: str) -> Instance:
73877388
if self._int_type is None:
73887389
self._int_type = self._named_type(name)
73897390
return self._int_type
7391+
if name == "builtins.bool":
7392+
if self._bool_type is None:
7393+
self._bool_type = self._named_type(name)
7394+
return self._bool_type
73907395
if name == "builtins.object":
73917396
if self._object_type is None:
73927397
self._object_type = self._named_type(name)

mypy/checkexpr.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,9 @@ def __init__(
360360
] = {}
361361
self.in_lambda_expr = False
362362

363+
self._literal_true: Instance | None = None
364+
self._literal_false: Instance | None = None
365+
363366
def reset(self) -> None:
364367
self.resolved_type = {}
365368
self.expr_cache.clear()
@@ -3428,11 +3431,19 @@ def infer_literal_expr_type(self, value: LiteralValue, fallback_name: str) -> Ty
34283431
if self.is_literal_context():
34293432
return LiteralType(value=value, fallback=typ)
34303433
else:
3431-
return typ.copy_modified(
3432-
last_known_value=LiteralType(
3433-
value=value, fallback=typ, line=typ.line, column=typ.column
3434-
)
3435-
)
3434+
if value is True:
3435+
if self._literal_true is None:
3436+
self._literal_true = typ.copy_modified(
3437+
last_known_value=LiteralType(value=value, fallback=typ)
3438+
)
3439+
return self._literal_true
3440+
if value is False:
3441+
if self._literal_false is None:
3442+
self._literal_false = typ.copy_modified(
3443+
last_known_value=LiteralType(value=value, fallback=typ)
3444+
)
3445+
return self._literal_false
3446+
return typ.copy_modified(last_known_value=LiteralType(value=value, fallback=typ))
34363447

34373448
def concat_tuples(self, left: TupleType, right: TupleType) -> TupleType:
34383449
"""Concatenate two fixed length tuples."""

mypy/semanal.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,9 +497,9 @@ def __init__(
497497
# Used to track edge case when return is still inside except* if it enters a loop
498498
self.return_stmt_inside_except_star_block: bool = False
499499

500-
self._object_type: Instance | None = None
501500
self._str_type: Instance | None = None
502501
self._function_type: Instance | None = None
502+
self._object_type: Instance | None = None
503503

504504
# mypyc doesn't properly handle implementing an abstractproperty
505505
# with a regular attribute so we make them properties

0 commit comments

Comments
 (0)