Skip to content

Commit f181d7b

Browse files
authored
Fix crash on direct inference via nodes.FunctionDef._infer (#1477)
1 parent 3c4388d commit f181d7b

File tree

4 files changed

+15
-4
lines changed

4 files changed

+15
-4
lines changed

ChangeLog

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ Release date: TBA
1515
* Promoted ``getattr()`` from ``astroid.scoped_nodes.FunctionDef`` to its parent
1616
``astroid.scoped_nodes.Lambda``.
1717

18+
* Fixed crash on direct inference via ``nodes.FunctionDef._infer``.
19+
20+
Closes #817
1821

1922

2023
What's New in astroid 2.11.0?

astroid/inference.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,8 +1039,10 @@ def infer_ifexp(self, context=None):
10391039

10401040
# pylint: disable=dangerous-default-value
10411041
@wrapt.decorator
1042-
def _cached_generator(func, instance, args, kwargs, _cache={}): # noqa: B006
1043-
node = args[0]
1042+
def _cached_generator(
1043+
func, instance: _FunctionDefT, args, kwargs, _cache={} # noqa: B006
1044+
):
1045+
node = instance
10441046
try:
10451047
return iter(_cache[func, id(node)])
10461048
except KeyError:

astroid/nodes/node_ng.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,15 @@ def infer(self, context=None, **kwargs):
163163

164164
if not context:
165165
# nodes_inferred?
166-
yield from self._infer(context, **kwargs)
166+
yield from self._infer(context=context, **kwargs)
167167
return
168168

169169
key = (self, context.lookupname, context.callcontext, context.boundnode)
170170
if key in context.inferred:
171171
yield from context.inferred[key]
172172
return
173173

174-
generator = self._infer(context, **kwargs)
174+
generator = self._infer(context=context, **kwargs)
175175
results = []
176176

177177
# Limit inference amount to help with performance issues with

tests/unittest_inference.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6640,5 +6640,11 @@ def patch(cls):
66406640
assert module
66416641

66426642

6643+
def test_function_def_cached_generator() -> None:
6644+
"""Regression test for https://github.com/PyCQA/astroid/issues/817."""
6645+
funcdef: nodes.FunctionDef = extract_node("def func(): pass")
6646+
next(funcdef._infer())
6647+
6648+
66436649
if __name__ == "__main__":
66446650
unittest.main()

0 commit comments

Comments
 (0)