diff options
author | Nick Drozd <nicholasdrozd@gmail.com> | 2018-11-06 09:18:21 -0600 |
---|---|---|
committer | Claudiu Popa <pcmanticore@gmail.com> | 2019-01-16 15:21:34 +0100 |
commit | 7fa547be48d6192e2572b9ade25f490bbd6ec0b4 (patch) | |
tree | bbe056e2486ae62fadf8df53023ea4dc36906901 /astroid/decorators.py | |
parent | 04856ecc2af19486689a9965c0075d4ce119b2cd (diff) | |
download | astroid-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.py | 38 |
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 |