Skip to content

Commit e51fb56

Browse files
authored
A few miscellaneous micro-optimizations (#14366)
These are part of the changes that collectively bring a 6% performance improvement. These are all pretty minor.
1 parent 2c22565 commit e51fb56

File tree

3 files changed

+13
-7
lines changed

3 files changed

+13
-7
lines changed

mypy/checker.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,10 +378,6 @@ def __init__(
378378
self.path = path
379379
self.msg = MessageBuilder(errors, modules)
380380
self.plugin = plugin
381-
self.expr_checker = mypy.checkexpr.ExpressionChecker(
382-
self, self.msg, self.plugin, per_line_checking_time_ns
383-
)
384-
self.pattern_checker = PatternChecker(self, self.msg, self.plugin)
385381
self.tscope = Scope()
386382
self.scope = CheckerScope(tree)
387383
self.binder = ConditionalTypeBinder()
@@ -419,6 +415,12 @@ def __init__(
419415
# example when type-checking class decorators.
420416
self.allow_abstract_call = False
421417

418+
# Child checker objects for specific AST node types
419+
self.expr_checker = mypy.checkexpr.ExpressionChecker(
420+
self, self.msg, self.plugin, per_line_checking_time_ns
421+
)
422+
self.pattern_checker = PatternChecker(self, self.msg, self.plugin)
423+
422424
@property
423425
def type_context(self) -> list[Type | None]:
424426
return self.expr_checker.type_context

mypy/checkexpr.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ def __init__(
276276
self.msg = msg
277277
self.plugin = plugin
278278
self.per_line_checking_time_ns = per_line_checking_time_ns
279-
self.collect_line_checking_stats = self.chk.options.line_checking_stats is not None
279+
self.collect_line_checking_stats = chk.options.line_checking_stats is not None
280280
# Are we already visiting some expression? This is used to avoid double counting
281281
# time for nested expressions.
282282
self.in_expression = False

mypy/types.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2623,13 +2623,17 @@ def __init__(
26232623
# We must keep this false to avoid crashes during semantic analysis.
26242624
# TODO: maybe switch this to True during type-checking pass?
26252625
self.items = flatten_nested_unions(items, handle_type_alias_type=False)
2626-
self.can_be_true = any(item.can_be_true for item in items)
2627-
self.can_be_false = any(item.can_be_false for item in items)
26282626
# is_evaluated should be set to false for type comments and string literals
26292627
self.is_evaluated = is_evaluated
26302628
# uses_pep604_syntax is True if Union uses OR syntax (X | Y)
26312629
self.uses_pep604_syntax = uses_pep604_syntax
26322630

2631+
def can_be_true_default(self) -> bool:
2632+
return any(item.can_be_true for item in self.items)
2633+
2634+
def can_be_false_default(self) -> bool:
2635+
return any(item.can_be_false for item in self.items)
2636+
26332637
def __hash__(self) -> int:
26342638
return hash(frozenset(self.items))
26352639

0 commit comments

Comments
 (0)