summaryrefslogtreecommitdiff
path: root/astroid/decorators.py
diff options
context:
space:
mode:
authorNick Drozd <nicholasdrozd@gmail.com>2018-11-06 09:18:21 -0600
committerClaudiu Popa <pcmanticore@gmail.com>2019-01-16 15:21:34 +0100
commit7fa547be48d6192e2572b9ade25f490bbd6ec0b4 (patch)
treebbe056e2486ae62fadf8df53023ea4dc36906901 /astroid/decorators.py
parent04856ecc2af19486689a9965c0075d4ce119b2cd (diff)
downloadastroid-git-7fa547be48d6192e2572b9ade25f490bbd6ec0b4.tar.gz
Cut generator flags
This simplifies the code, and may slightly improve performance.
Diffstat (limited to 'astroid/decorators.py')
-rw-r--r--astroid/decorators.py38
1 files changed, 21 insertions, 17 deletions
diff --git a/astroid/decorators.py b/astroid/decorators.py
index d24c588f..14487570 100644
--- a/astroid/decorators.py
+++ b/astroid/decorators.py
@@ -111,27 +111,31 @@ def path_wrapper(func):
@wrapt.decorator
def yes_if_nothing_inferred(func, instance, args, kwargs):
- inferred = False
- for node in func(*args, **kwargs):
- inferred = True
- yield node
- if not inferred:
+ generator = func(*args, **kwargs)
+
+ try:
+ yield next(generator)
+ except StopIteration:
+ # generator is empty
yield util.Uninferable
+ return
+
+ yield from generator
@wrapt.decorator
def raise_if_nothing_inferred(func, instance, args, kwargs):
- inferred = False
+ generator = func(*args, **kwargs)
+
try:
- generator = func(*args, **kwargs)
- while True:
- yield next(generator)
- inferred = True
+ yield next(generator)
except StopIteration as error:
- if not inferred:
- if error.args:
- # pylint: disable=not-a-mapping
- raise exceptions.InferenceError(**error.args[0])
- raise exceptions.InferenceError(
- "StopIteration raised without any error information."
- )
+ # generator is empty
+ if error.args:
+ # pylint: disable=not-a-mapping
+ raise exceptions.InferenceError(**error.args[0])
+ raise exceptions.InferenceError(
+ "StopIteration raised without any error information."
+ )
+
+ yield from generator